암호학과는 거리가 멀줄알았지만, 암호화관련 프로그램을 작성하게되면서 새로알게된점과
해깔리던점을 포스팅해둔다..
내가사용한모드는 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 |