본문 바로가기
프로그래밍

블록 암호 운용 방식 CBC ECB

by TcTT 2017. 5. 15.
반응형

암호학과는 거리가 멀줄알았지만, 암호화관련 프로그램을 작성하게되면서 새로알게된점과

해깔리던점을 포스팅해둔다..

내가사용한모드는 ECB, CBC모드만 사용했으니 두가지만 작성한다.



블록암호 : 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지를 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식으로 부른다.


ECB : 운용 방식 중 가장 간단한 구조를 가지며, 암호화하려는 메시지를 여러 블록으로 나누어 각각 암호화하는 방식으로 되어 있다.

암호화 방식은 아래 그림과 같다.

암/복호화할 데이터를 일정 단위 블록으로나눠 Key를 가지고 암복호화를 진행한다.

함수로 나타낸다면 P(평문) / C(암호문)

암호화 => En(P[i])

복호화 => De(C[i])



전자 코드북은 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약하다. 만약 암호화 메시지를 여러 부분으로 나누었을 때 두 블록이 같은 값을 가진다면, 암호화한 결과 역시 같다. 이것은 공격자가 비슷한 메시지를 반복적으로 암호화하는 반복공격에도 취약한 성질을 가진다.





CBC : 각 블록은 암호화되기 전에 이전 블록의 암호화 결과와 XOR되며, 첫 블록의 경우에는 초기화 벡터가 사용된다. 초기화 벡터가 같은 경우 출력 결과가 항상 같기 때문에, 매 암호화마다 다른 초기화 벡터(IV)를 사용해야 한다.

암호화 방식은 아래 그림과 같다.

암/복호화할 데이터를 일정 단위 블록으로나누는건 ECB모드와 동일하지만 암호화 하는 데이터가 바뀐다(?).

첫 암/복호화전에 데이터+초기화벡터를 xor연산하고 Key를 통해 암/복호화한다.

암복호화한 결과를 다음 데이터와 xor연산하고 Key를통해 다음 암/복호화 데이터를 생성한다.

CBC 방식은 현재 널리 사용되는 운용 방식 중 하나이다. CBC는 암호화 입력 값이 이전 결과에 의존하기 때문에 병렬화가 불가능하지만, 복호화의 경우 각 블록을 복호화한 다음 이전 암호화 블록과 XOR하여 복구할 수 있기 때문에 병렬화가 가능하다.

또한 초기화백터(IV)에 따라 값이 달라지니 중요함!

함수로 나타낸다면 P(평문) / C(암호문)

암호화 => En(XOR(P[i], C[i-1]))

복호화 => XOR(De(C[i]), C[i-1])



출처 : https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D


반응형

'프로그래밍' 카테고리의 다른 글

WEB서버와 WAS 서버의 차이점  (0) 2017.05.31
jTessBoxEditor 사용법  (9) 2017.05.29
CODE PROJECT License  (0) 2017.05.22
아스키코드 표  (0) 2017.04.10
오라클 계정생성 및 관리  (0) 2016.07.05