저번 글에서 Block Cipher에 대해 알아보았다. 그런데 또 mode라는 게 있는데 이게 무엇인가?
아마 이전의 Block암호화를 이해한 정도로 예상하자면 각 Block이 각각 따로 Feistel 구조에 의해서 암호화가 되는 시나리오일 것이다.
이런 구조를 ECB구조라고 한다.
원본의 펭귄 이미지가 ECB를 거치면 각각이 동일한 암호화 수준으로 암호화가 되므로 원본이 반영되어 유추가 된다.
그래서 큰 데이터에 대해서 적용할 때는 좋지 않다.
다음은 CBC모드이다. 이름에 Chain이 들어가 있는 것을 통해 어느 정도 유추할 수 있지만 Block이 chain처럼 연결이 되어 암호화가 된다.
자세히 보면 초기 벡터(IV)와 평문이 xor가 되고 key에 의해 암호화가 된다.
이 결과는 그대로 output이 되어 나가고 다음 block의 초기 벡터의 역할이 되어 input이 된다.
즉 이전 것이 1비트만 바뀌어도 뒤에것이 완벽히 바뀐다.
만약 Initial Vector가 알려지면 평문과 나오는 암호문을 통해 key 값을 좀 더 잘 찾아낼 수 있다.
CFB모드에 대한 사진이 PPT에 없어서 구글에서 가져왔다.
차이점을 위주로 보자.
이는 초기벡터를 암호화하여 평문과 xor 하여 출력이 된다.
역시나 이 결과가 다음 블록의 초기벡터 역할을 한다.
이는 OFB모드이다.
주의해서 봐야할것은 이전 CFB의 경우 출력이 다음 초기 벡터로 갔지만 이것은 초기 벡터의 암호 값이 전달이 되고
암호문은 암호문대로 출력이 된다. 이렇게 되면 미리 초기벡터들을 구해 놓을 수가 있다는 장점이 있다.
이는 속도의 상승에 기여한다.
Counter값을 key값을 통해 암호화 시키고 이를 평문과 xor 하여 암호문을 얻는다.
이 또한 OFB와 같이 counter값을 통해 미리 구해놓을 수가 있다.
이외에 조금더 복잡한 GCM이라는 것이 있다. 이는 특징적으로 암호화와 Mac을 동시에 수행할 수 있다.
어떻게 보면 카운터 값에 암호화를 하고 출력을 평문에 대해 xor 한다.
이까지 보면 counter모드이지만 추가로 aad(=additional authentication data)를 수행한다.
이를 구하는 과정은 여기 적기엔 조금 그래서.. 구글링을 해보길 바랍니다. ㅎㅎ
'Infomation_Security' 카테고리의 다른 글
공개키 암호와 RSA (0) | 2021.08.19 |
---|---|
AES (0) | 2021.08.07 |
Block Cipher(블록 암호화) (0) | 2021.07.17 |
Stream Cipher (0) | 2021.07.16 |
Introduction to Cryptograph and Security (0) | 2021.07.16 |