ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 암호학 5주차 - 블록암호
    보안/CRYPTOGRAPHY 2024. 3. 16. 10:17

    0. 서론

    • DES와 AES 같은 블록 암호는 한 번에 한 블록의 평문을 암호화하기 위해 설계되었다.
    • DES는 64비트. AES는 128비트의 평문을 한 블록으로 처리한다.
    • UTF-8로 인코딩할 때 알파벳 한 글자는 8비트에 대응되므로 DES와 AES는 각각 8글자, 16글자를 한번에

    암호화할 수 있다.

    • 사용되는 평문의 길이가 이 길이를 넘는 경우 운영 모드는 블록 암호로 다양한 크기의 데이터를 처리할 수 있도록 했다.


    1. 패딩

    : 평문에 데이터를 붙여서 평문의 크기가 블록 크기의 배수가 되도록 만드는 과정

    - 평문의 크기가 블록 크기의 배수가 되지 않을 때 사용

    - 패딩한 암호문 복호화: 복호화된 평문에서 패딩을 제거한다.

    패딩된 암호문의 수신자는 어떤 패딩이 적용됐는지 알아야 암호문을 제대로 복호화 가능

    - 주로 사용되는 패딩 기법: 비트 패딩, 바이트 패딩, PKCS#7

    • 비트 패딩(Bit Padding)

    : 마지막 블록에서 평문이 채우지 못하는 비트 중 최상위 비트를 1로 설정하고 나머지는 모두 0으로 채우는 패딩 기법

    - 수신자는 평문의 마지막 비트부터 처음으로 값이 1인 비트가 나올 때까지를 패딩으로 인식, 제거해서 평문 복구

    - 평문의 크기가 정확하게 블록 크기의 배수일 때 수신자가 메세지의 일부를 패딩으로 오인하는 문제 발생

    --> 비트 패딩 적용 시 평문의 크기가 블록 크기의 배수이면 패딩으로 한 블록을 추가한다.

    ex. 평문이 1011 1011 1111 1000 이다. 수신자는 1000을 패딩이라고 생각해 제거할 수 있으므로

    ∣1011 1011 1111 1000 ∣ 1000 0000 0000 0000

    로 수정해야 평문을 오류 없이 복호화할 수 있다.

    • 바이트 패딩

    : 바이트 단위로 패딩을 수행하는 패딩 기법

    • 바이트 패딩: ANSI X. 923

    - ANSI X. 923: 마지막 블록의 남는 바이트를 임의의 값(일반적으로 0)으로 채우고

    마지막 바이트에 패딩의 길이를 기록하는 기법

    - 비트 패딩과 마찬가지로 평문 크기가 블록 크기의 배수일 때 수신자가 평문을 패딩으로 오인할 수 있다.

    - 평문의 크기가 블록 크기의 배수일 때 마지막에 한 블록을 패딩으로 추가한다.

    • 바이트 패딩: PKCS#7

    - PKCS(Public-Key Cryptography Standard): 공개키 암호의 표준 문서

    - PKCS#7: PKCS의 7번째 문서로 AES와 같은 블록 암호의 패딩 기법을 제시

    추가할 패딩의 바이트 크기로 마지막 블록을 채우는 패딩 기법

    - 다른 패딩 기법들과 마찬가지로 평문의 크기가 블록 크기의 배수이면 0808080808080808

    을 패딩으로 추가한다.


    2. 운영모드

    평문은 패딩을 거친 뒤 여러 블록으로 나뉘고 각각의 블록은 블록 암호의 운영 모드에 따라 암호화된다.

    • ECB (Electronic Code Book) 모드

    : 가장 간단한 운영모드로 블록들은 모두 같은 키로 암호화된다.

    - 장점: 각 블록이 독립적으로 암호화되므로 여러 블록을 병렬적으로 암호화할 수 있다.

    - 단점: 다른 운영모드에 비해 암호학적 안전성이 부족하다.

     

    - ECB 모드의 취약점

    1. 약한 혼돈 성질

    - 같은 블록은 같은 암호문으로 암호화된다.

    - 이를 이용해 암호문에서 평문의 정보 습득/ 리플레이 공격 수행이 가능해진다.

    - 이미지의 한 픽셀을 한 블록으로 ECB암호화하면 같은 픽셀은 모두 같은 픽셀로 암호화된다.

    원본 이미지의 패턴이 암호화된 이미지에도 나타니기 때문에 암호문으로부터 평문의 정보를

    유추할 수 있다.

    2. 재전송 공격 (Replay Attack)

    : 어떤 데이터를 재전송하여 시스템이 의도치 않은 행동을 하게 하는 것

    - ECB 모드에서의 재전송 공격

    ex. alice 가 'alice sent 10000$ to Bob'이라는 24바이트 평문을 4바이트 블록 암호로 암호화하여

    은행에 보내면 은행이 해석하고 Bob에게 송금한다고 하자.

    Bob이 alice의 평문과 암호문을 안다면 더 많은 돈을 송금하게 할 수 있다.

    • CBC (Cipher Block Chaining) 모드

    : 어떤 블록을 암호화하기 전에 이 블록을 직전 블록의 암호문과 xor한다.

    - 평문의 첫 번째 블록은 초기 벡터(Initialization Vector, IV)라고 불리는 임의의 데이터와 xor 한다.

    - 초기 벡터는 논스(Nonce, number used only once)라는 무작위 값 사용한다.

    --> 공격자가 알아도 안전성에 영향 X

    --> 만약 공격자가 암호문을 가로채서 조작할 수 있으면 복호화 결과의 첫 번째 블록을 조작할 수 있다.

    --- > CBC 모드를 사용할 때 초기 벡터의 무결성을 보장해야 한다.

    - 이 모드를 사용하면 각 블록이 서로의 암호화에 영향을 주므로 같은 블록도 전체 평문 및 IV에 따라

    암호화 결과가 달라진다.

    - 송신자의 초기 벡터를 C_0이라 할 때

    암호화: C0=IV,Ci=Ek(PiCi−1),i≥1

    복호화: C0=IV, , Pi=Dk(Ci)⨁Ci−1,i≥1

     

    - 암호화할 때 직전 블록의 암호화 결과를 사용하므로 여러 블록을 병렬적으로 암호화할 수 없다.

    - 복호화할 때 모든 암호문 블록을 알고 있어서 병렬적으로 처리할 수 있다.

    - 장점: 재전송 공격에 강하고 높은 혼돈성을 가지고 있어서 블록 암호의 운영 모드로 잘 사용된다.

    • CBC Bit-Flipping Attack

    : 공격자가 초기 벡터를 원하는 값으로 조작하여 복호화된 평문의 첫 번째 블록을 조작하는 공격

    - 첫번째 암호문 블록의 복호화 과정: P1=Dk(C1)⨁IV

    - 공격자는 초기 벡터를 IV′=P1⨁P1′​⨁IV로 조작해서 첫 번째 평문 블록을 P1′ 으로 조작할 수 있다.

    Dk(C1)⨁IV′=(P1⨁IV)⨁IV′

    =(P1⨁IV)⨁P1⨁P1′⨁IV

    =P1′

    • CTR모드

    : 블록 암호에 nonce와 평문 블록의 인덱스(counter)를 결합한 값을 입력한다.

    - 암호문은 블록 암호의 출력과 평문 블록을 xor하여 생성한다.

    - CTR모드의 암호화, 복호화, || 는 두 바이트 배열을 결합하는 기호

    암호화:Pi⨁Ek(nonce∣∣counter)

    복호화: Ci⨁Ek(nonce∣∣counter)

    - 장점: 블록을 순서대로 암복호화하지 않아도 되므로 별렬로 암복호화할 수 있고

    구현이 간단하다.

    '보안 > CRYPTOGRAPHY' 카테고리의 다른 글

    암호학 6주차 - RSA  (5) 2024.03.16
    암호학 6주차 - Diffie-Hellman 알고리즘  (0) 2024.03.16
    암호학 5주차 - DES  (0) 2024.03.15
    암호학 5주차 - AES  (1) 2024.03.15
    암호학 4주차 - 현대 암호  (0) 2024.03.15
Designed by Tistory.