블록 암호(Block cipher) |
블록 암호는 정보를 블록 단위로 암호화하는 대칭키 암호 시스템이다. 입력 비트와 출력 비트가 정해져 있다.
AES가 많이 사용된다.
AES(Advanced Encryption Standard) |
2001년 미국 표준 기술 연구소에서 제정된 암호화 방식이다.
DES의 안전성에 대한 논란 이후 새로운 암호 프로토콜이 필요했고, 링델(Rijndael) 암호가 가장 적합한 알고리즘으로 선정되어 AES라는 표준으로 채택되었다.
128비트, 192비트, 256비트 세 가지 키 길이로 처리할 수 있다. 안전성을 바란다면 256비트를, 빠른 속도를 바란다면 129비트를 이용한다.
입력과 출력 사이에는 레이어(라운드)가 있다. 128비트에서는 10라운드, 192비트에서는 12라운드, 256비트에서는 14라운드를 거친다. 각 레이어는 입력을 받아 XOR 연산을 수행한다. 이 결과는 블록으로 쪼개지고, 블록끼리 치환한다. 치환된 블록은 뒤섞어 다음 라운드로 보낸다. 다음 라운드에서도 같은 과정을 거친다. 다만 마지막 라운드에서는 치환 과정을 거치지 않는다.
AES는 가속하는 하드웨어가 많아 아주 빠른 속도로 수행할 수 있다.
하지만 AES를 사용하는 것만으로 암호화가 끝나지 않는다.
블록 암호를 사용하기 위해서는 데이터를 블록으로 나누어야 하고, 그 블록을 어떻게 암호화할지 정해야 한다.
ECB(Electronic codebook) |
ECB는 암호화하려는 메시지를 여러 불록으로 나누어 각각 암호화하는 방식이다.
모든 블록이 같은 암호화 키를 사용한다. 주어진 블록이 같은 메시지인 경우 암호문도 같은 값이 나온다. '같다'는 정보가 유출될 수 있으므로 보안에 취약하다.
CBC(Cipher block chaning) |
초기화벡터(IV, Initial Vector)는 첫 블록을 암호화할 때 사용되는 값이다.
각 블록은 암호화되기 전 이전 블록의 암호화 결과와 XOR 연산을 수행한다. 첫 블록은 IV를 사용해 암호화가 진행된다.
CTR(Counter) |
카운터(CTR, Counter) 방식은 블록 암호를 스트림 암호로 바꾸는 구조이다. 역시 IV를 사용한다.
키와 IV 그리고 각 블록이 몇 번째인지를 알리는 인덱스를 사용해 난수를 생성한다. 이 값을 평문과 XOR하여 암호문을 만든다. 암호화를 진행 때 앞 블록의 계산이 끝나지 않아도 뒤 블록을 계산을 수 있으므로 병렬 수행이 가능하다.
참고자료
매치업 - 블록체인을 위한 암호학과 보안성 7주차
'보안 > 블록체인' 카테고리의 다른 글
비대칭 암호화 (0) | 2020.11.20 |
---|---|
블록체인 암호학 - 고전 암호, 현대 암호 시스템 (0) | 2020.11.03 |
블록체인 암호학 - 전자 서명 2 (0) | 2020.10.06 |
블록체인 암호학- 전자서명 (0) | 2020.09.22 |
블록체인 암호학 - 작업 증명(PoW), 양자 안정성, 머클 해시 트리 (0) | 2020.09.15 |