※ MySQL 데이터를 넣고 받을 때 SHA-512, AES 암호화 알고리즘을 사용할 예정입니다.
1. SHA(Secure Hash Algorithm) 알고리즘
SHA-512 알고리즘을 이용한 암호화, 복호화 알고리즘
2. AES(Advanced Encryption Standard) 알고리즘
- 암호화 블럭의 크기가 128비트이며 암호화 키의 길이가 128, 192, 256비트인 세 가지 종류가 AES 표준으로 지정되었다. 각각 AES-128, AES-192, AES-256으로 불린다.
- 대칭형, 블럭 암호화 알고리즘
- 미국 정부가 채택하여 기밀문서를 암호화를 했다. 즉, 정부가 믿을 정도라는 것이다. 일단 아직은 AES가 최강의 암호화 알고리즘이고, 키없이 해독하는 것이 거의 불가능하다고 믿어지고 있다. 심지어 다른 최신 cipher와 마찬가지로, known-plaintext 해킹기술로도 해독이 불가능하다고 한다.
- 소수를 사용한 암호화
데이터베이스의 정보를 암호화 하는것이 다음과 같다는 것을 알게되었다. 이제 본격적으로 데이터베이스에 적용해 보자
3. 암호화(AES_ENCRYPT)
- HEX() : 괄호안의 값을 16진수로 변환
- AES_ENCRYPT(문자열, 해시 알고리즘)
- sha2('난수', 512): sha 512 사용, 난수는 자유롭게 생성
- 난수 ex) JREdr7DCVB4e4fjfj3jDFGCVBrfsdfakjlF
HEX(AES_ENCRYPT('TEXT',sha2('난수', 512)));
예시 - 삽입)
insert into account_id
values HEX(AES_ENCRYPT('test_account',sha2('JREdr7DCVB4e4fjfj3jDFGCVBrfsdfakjlF
', 512)));
예시 - 검색)
select account_id
from account
where account_id = HEX(AES_ENCRYPT('test_account',sha2('JREdr7DCVB4e4fjfj3jDFGCVBrfsdfakjlF
', 512)));
--> 암호화 된 상태로 출력
4. 복호화(AES_DECRYPT)
- UNHEX(): 16진수 값을 그에 대응하는 숫자, 문자로 변환
- AES_DECRYPT(암호화된 문자열, 해시 알고리즘)
- sha2('난수', 512): 암호화에 사용했던 난수를 반드시 사용해야함
AES_DECRYPT(unhex('TEXT'), sha2('난수', 512))
예시 - 검색)
select AES_DECRYPT(unhex(account_id), sha2('JREdr7DCVB4e4fjfj3jDFGCVBrfsdfakjlF', 512))
from account
where account_id = HEX(AES_ENCRYPT('test_account',sha2('JREdr7DCVB4e4fjfj3jDFGCVBrfsdfakjlF
', 512)));
--> test_account 출력!
'기타 > MySQL' 카테고리의 다른 글
[MySQL] IN 조건절 사용, 다른 테이블 비교(서브쿼리) (0) | 2022.05.23 |
---|