Advanced Encryption Standard AES
한국어로 번역하면 고급 암호화 표준, 대칭키를 쓰는 블럭 암호이다.
높은 안전성과 속도로 인기를 얻어 전세계적으로 사용됨
Rijndael(레인달) 알고리즘을 가지고 만듬
대칭형
블럭 암호화 알고리즘
대칭형 암호화 알고리즘 중 가장 유명하고, 128, 192, 256 bit 중 하나가 됨
미 정부가 채택하여 기밀문서를 암호화했을 정도로 신뢰가 가는 알고리즘
키 없이 해독하는 것이 거의 불가능
현재 권장되는 암호화 수준은 192bit 이상, 대다수 금융기관들은 256 bit이상 사용
AES128과 비교하여 보안성과 안정성이 높으며, 더 나아가 비대칭키보다 속도가 빠르다는 이점을 가지고 있음
단점
키 한개로 암호화와 복호화를 하기 때문에, 키 유출이 된다면 암호화의 의미가 없어짐
암호화
plain text => plain bytes => encrypt => encrypted bites => encrypted base64 text
복호화
암호화 과정을 반대로 수행
여러가지 필요한 값들이 있지만, 꼭 필요한 값 두가지가 존재
먼저 사용자가 입력한 plain text
이는 실제로 사용자가 회원가입 인풋 태그에 입력한 비밀번호 스트링 값이됨
서버에서 지정한 Salt
입력받은 스트링 값에 소금을 치는것
입력받은 비밀번호를 그대로 해싱하는 것이 아니라, 서버에서 지정하여 유저는 알 수 없는 소금을 친 비밀번호를 해싱
-> 그렇기 때문에, 소금은 절대 외부로 유출되어선 안되고, 쉽게 연상할 수 있는 소금이 되어선 안됨
블록암호화를 진행하기 위해서는 패딩기법이 필요
데이터를 특정 크기로 맞추기 위해서, 특정 크기보다 부족한 부분의 공간을 의미없는 문자들로 채워서 비트수를 맞춤
일반적으로 쓰는 패딩
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");