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가지가 제공되었다.
- MAC-Then-Encrypt
- Encrypt-Then-MAC
- Encrypt-And-MAC
Standards
Encrypt-And-MAC은 SSH에서 사용을 한다.
ex)putty
AEAD
Nonce, 연관데이터, 메시지, Key 4가지를 넣어 암호화를 하고
반대도 4가지의 데이터를 넣어 메시지를 구한다.
AEAD Options
- Encrypt-then-MAC
- MAC-then-encrypt
- Encrypt-and-MAC
Case
- 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
이전에 에러가나면 종료해서 시간차 공격에 대해 나오긴했으나 현재는 에러가 발생해도 모두 확인하고 에러를 낸다.
- 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
- extract pseudo-random key k from source key SK
- 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를 입력하는 창이 나온다.
결론적으로 아래와 같이 구동 된다.