8. Authenticated Encryption and KDF

KyoungJae Jung ·2022년 2월 25일
0

암호학

목록 보기
3/7

Authenticated Encryption

인증암호와 Key유도함수를 볼 것이다.
현실에서 AES를 CBC, CTR모드를 통해 Confidentiality를 제공한다.
이러한 모드는 CPA공격에만 안전한 모드이다.
그러나 현실은 CPA공격만 있는 것이 아니다.
그리고 CBC-MAC (or CMAC), HMAC을 통해 Integrity를 제공하였다.
이는 CMA공격에 대해 안전함을 알 수 있다.
그러나 이러한 두가지를 함께 공유하고 암호화와 MAC을 취한다면 공격자가 공격하기 힘듬을 알 수 있다.
이러한 4가지를 섞어서 기밀성과 무결성을 제공할 수 있다.

만약 암호문에 intergrity를 제공하지 않는다면


이러한 방식으로 동작하는 부분에서 TCP/IP stack 부분이 내부망이라면 모든 연결된기기에게 물어보므로 bob이 이를 탈취할 수 있다.
IPsec을 한다면?

그러나 이 방법에서의 문제점은?

nonce를 공유지않는다면 IV가 있다.
IV가 노출된다고 했을 때
흘러가는 암호문을 잠시 멈추고 80에 대한 부분을 내 port로 변경하면 훔칠 수 있다.

위와 같은 방식으로 80이 있을 부분을 예측해서 공격이 가능하다.
문제점은 흘러가는 암호문이 누군가 위변조 했는지 알 수가 없다.

따라서 암호학자들이 여기에 MAC을 넣으면 tempering공격을 막을 수 있다고 생각


confidentiality under a CPA attack, and
ciphertext integrity: attacker cannot create new ciphertexts that decrypt properly

그래서 ENC와 MAC에 대한 옵션이 3가지가 제공되었다.

  1. MAC-Then-Encrypt
  2. Encrypt-Then-MAC
  3. Encrypt-And-MAC

Standards



Encrypt-And-MAC은 SSH에서 사용을 한다.
ex)putty

AEAD


Nonce, 연관데이터, 메시지, Key 4가지를 넣어 암호화를 하고
반대도 4가지의 데이터를 넣어 메시지를 구한다.

AEAD Options

  1. Encrypt-then-MAC
  2. MAC-then-encrypt
  3. Encrypt-and-MAC


Case

  1. TLS1.2(MAC-Then-Encrypt)


    packet을 주고 받을 때 ctr을 포함하지 않는다.
    TLS Record Enc(CBC AES-128, HMAC-SHA1)

    이때 Browser측 Enc는 (kb⇾s , data, ctrb⇾s )
    - step 1: tag ⟵MAC(kmac , [ ++ctrb⇾s ll header ll data])
    - step 2: pad [ header ll data ll tag ] to AES block size
    - step 3: CBC encrypt with kenc and new random IV
    - step 4: prepend header
    TLS Record Dec(CBC AES-128, HMAC-SHA1)
    Server측의 dec에서는(kb⇾s , record, ctrb⇾s )
    - step 1: CBC decrypt record using kenc
    - step 2: check pad format: send bad_record_mac if invalid
    - step 3: check tag on [ ++ctrb⇾s ll header ll data]
    - send bad_record_mac if invalid
    이전에 에러가나면 종료해서 시간차 공격에 대해 나오긴했으나 현재는 에러가 발생해도 모두 확인하고 에러를 낸다.
  2. TLS1.1
    IV for CBC is predictable: (chained IV)
    IV for next record is last ciphertext block of current record.
    Not CPA secure

    이는 공격에 취약하다는 것을 이전의 공격에서 알아봤다.
    Padding oracle: during decryption
    if pad is invalid send decryption failed alert ㅗ
    if mac is invalid send bad_record_mac alert ㅗ
    따라서 constant time에 error를 내야한다.

Key Derivation Function (KDF)


사용하는 이유는 source key의 Entropy는 충분하지만 bias되어있다.
이러한 key들은 사용하면 안되므로 KDF가 필요하다.

따라서 아래의 방법을 사용한다.

Extract-then-Expand Paradigm

  1. extract pseudo-random key k from source key SK
  2. expand k by using it as a PRF key

종류

  • HKDF: PRF=HMAC

    Expension

    expension에는 무조껀 HMAC이 사용되는 것이 아님.
    AES-CTR이 사용될 수 있다.
  • PBKDF: Password-Based KDF
    H(pw) -> K

    PBKDF2 = enhanced in terms of (SHA-256, c times, salt-length)

Password-Base Encryption
인증서 로그인에서 사용되는 방식이다.
사용자에게는 인증서를 누르고 PW를 입력하는 창이 나온다.

결론적으로 아래와 같이 구동 된다.

profile
보안전문가를 꿈꾸는 대학생

0개의 댓글