얼마전 망법/개인정보 보호법 개정 시행령 때문에 한동안 AES 암호화에 대해서 작업을 했는데..
MySQL의 AES_ENCRYPT는 AES-128까지 밖에 지원이 되지 않습니다. 256bit를 지원하기 위해서는 소스의 AES_KEY_LENGTH 상수를 256으로 수정하여 다시 빌드를 하라는 문서 밖에 찾을 수가 없었습니다. MySQL을 다시 빌드하라는 것은 너무 끔찍하고, 누군가 UDF를 만들어 놓지 않았을까 생각을 하고선 열심히 찾아 보았으나, 대부분 application에서 처리를 하는지 찾을 수가 없네요.
그래서, application에서 처리를 하다보니 어쩌다가 MySQL UDF까지 만들고 말아 버렸습니다.
일단, MySQL에서 UDF로 AES-256을 지원을 하고, php와 javascript에서 이 함수들과 호환이 되는 API를 만드는 것이 1차 목표였는데요.
작업 결과, AES-128, AES-192, AES-256을 지원가능하게 만들었고, AES-128시에는 MySQL의 native AES_ENCRYPT/AES_DECRYPT와 호환이 되게 작성이 되었습니다. MySQL의 AES_KEY_LENGTH 상수값을 256으로 변경을 하여 리빌드를 하면, 키길이가 128bit라도 AES-256으로 Encryption되지만, 제가 만든 MySQL UDF는 key bit에 따라 AES-128, AES-192, AES-256으로 Encryption이 됩니다.
소스는 여기서 다운로드 받을 수 있습니다.
https://github.com/Joungkyun/lib_mysqludf_aes256
http://mirror.oops.org/pub/oops/php/pear/mysqlAES/
http://mirror.oops.org/pub/oops/javascript/mysqlAES/
잘 사용하기를..
혹시 문의가 있으면, http://oops.org/의 QnA Board로 하기 바랍니다. 여기에 질문하면 한 두세달 뒤에 확인할 확률이 높습니다. :-)
Comments List
좋은글 감사합니다.
mysql 5.5 에서 AES-256을 구현해야 해서 찾다가 정균님의 글을 발견하게 되었습니다.
개발해 주신 노고에 감사드립니다.
mysql의 경우 5.6.17 부터 block_encryption_mode 옵션을 이용하여 AES_ENCRYTP를 AES-256으로 동작 시킬 수 있습니다. 다음 URL 참고 하세요.
http://mysqlblog.fivefarmers.com/2014/03/27/mysql-5-6-17-now-with-better-encryption/
mysql 5.7.4 부터는 key 길이를 32byte로 지정하면 AES-256으로 암호화 가능 합니다.
mariadb 10.1 에서 1.0.3 정상 동작 확인 되었습니다.