단방향 암호화는 평문을 암호화 했을 때 다시 평문으로 되돌리는 것(복호화)을 할 수 없는 암호화 방식으로 패스워드 암호화에 사용되며 대표적으로 'SHA-256'이 있습니다.
양방향 암호화는 평문에서 암호문으로, 암호문에서 평문으로 변환할 수 있는 방식으로 대표적으로 아래에서 살펴볼 'AES-256'이 있습니다.
AES는 암호화 및 복호화에 동일한 키를 사용하는 대칭키 알고리즘으로 높은 안전성과 빠른 속도로 인해 양방향 암호화에서 가장 많이 사용되는 방식입니다. AES 암호화의 종류는 AES-128, AES-192, AES-256이 있으며 뒤에 붙은 숫자는 키의 길이를 의미합니다.
(128bit = 16byte, 192bit = 24byte, 256bit = 32byte)
* 대칭키(Symmetric Key)는 암호화하고 복호화 하는데 사용되는 키가 동일한 것임을 의미하며, 반대로 비대칭키(Asymmetric Key)는 암호화와 복호화에 각각 다른 키가 사용되는 것입니다.
패딩(padding)이란, 블록의 암호화를 진행하기 위해 필요한 기법으로 데이터를 특정 크기로 맞추기 위해서 사용되며, 특정 크기보다 부족한 부분의 공간을 의미 없는 문자들로 채워서 비트수를 맞추는 것입니다. (암호화 시에는 반드시 필요)
(자바에서는 PKCS5 패딩모드를 사용해도 PKCS7이 적용됩니다.)
AES/CBC 방식의 경우 128bit의 고정된 블록 단위로 암호화를 수행하게 되는데, CBC mode는 위 이미지에서 볼 수 있는 것처럼 이전에 암호화했던 블록화 XOR 연산을 한 다음에 암호화를 수행합니다.
그런데 첫 블록은 이전 암호화가 없기 때문에 이를 위해 IV(초기화 벡터)를 이용합니다. AES는 128bit(16byte) 단위로 암호화하기 때문에 IV도 16byte의 크기가 필요합니다.
IV(Initialize Vector), 초기화 벡터입니다.
위와 같은 원리로 매번 다른 IV를 생성하면 같은 평문이라도 다른 암호문을 생성할 수 있습니다. 또한 IV는 암호를 복호화할 사람에게 미리 제공되어야 하고 키와 달리 공개되어도 상관없습니다.
(미리 송신자와 수신자가 IV를 어떤 것으로 사용할지 정해두거나 파일에 IV를 기록해두는 방식으로 공유합니다.)
'개발 > Tool' 카테고리의 다른 글
gsjava gitlab 업그레이드 (0) | 2023.11.16 |
---|---|
Redmine/Mantis 비교 (0) | 2022.08.25 |
gsjava Error information: "SignerTimeStamp() failed. (0) | 2021.01.04 |
gsjava 여러 파일 이름 일괄 변경하기 (0) | 2020.04.04 |
gsjava windows 10 fat32 포맷이 필요한 경우 (0) | 2020.02.16 |