중간자 공격을 막기 위한 표준적인 방법은 디지털 서명을 사용하는 station-to-station protocol(STS)이라 불리는 방법이다. 각각의 사용자 U는 검증 알고리즘 ver(U)를 가지는 서명 함수 sig(U)를 가진다. 예를 들어, sig(U)는 RSA나 ElGamal 서명을 사용할 수도 있고, ver(U)는 이 서명이 유효한지 검사한다. 검증 알고리즘 ver(U)는, ver(U)가 Eve에 의한 것이 아닌, 사용자 U의 검증 알고리즘임을 인증하고 공개한다.
Alice와 Bob이 Encryption 함수 Ek를 사용하는 키 K를 생성하려고 한다고 하자. 키 교환은 Diffie-Hellman 키 교환 방식으로 이루어지지만, 여기에 디지털 서명 과정이 추가된다.
1. Alice와 Bob은 큰 Prime Number p와 Primitive Root α를 선택한다.
2. Alice는 1 ≤ x ≤ p - 2인 임의의 x를 선택하고, Bob도 마찬가지로 1 ≤ y ≤ p - 2인 y를 선택한다.
3. Alice는 α^x (mod p)를 계산하고, Bob도 α^y (mod p)를 계산한다.
4. Alice는 Bob에게 α^x를 보낸다.
5. Bob은 K ≡ (α^x)^y (mod p)를 계산한다.
6. Bob은 Alice에게 α^y와 Ek(sigB(α^y, α^x))를 보낸다.
7. Alice는 K ≡ (α^y)^x (mod p)를 계산한다.
8. Alice는 sigB(α^y, α^x)를 얻기 위해 Ek(sigB(α^y, α^x))를 decryption 한다.
9. Alice는 Trent에게 verB가 Bob의 검증 알고리즘이 맞는지 확인한다.
10. Alice는 Bob의 서명을 확인하기 위해 verB를 사용한다.
11. Alice는 Bob에게 Ek(sigA(α^y, α^x))를 보낸다.
12. Bob은 Trent에게 verA가 Alice의 검증 알고리즘이 맞는지 여부를 확인하고, 맞다면 verA를 사용하여 Alice의 서명을 확인하고 암호화를 decryption 한다.
이 방법이 어떻게 중간자 공격에서 안전할 수 있는가? 먼저, 7 단계까지는 Diffie-Hellman 키 교환과 동일한 방법으로 키 교환이 이루어지며, Eve가 키를 위조하기 위해 중간자 공격을 할 수 있다. 위조된 키로 Ek를 decryption 하면 sigB(α^y, α^x)를 얻게 되는데, Alice는 Trent에게 Bob의 검증 알고리즘 verB를 사용하여 sigB(α^y, α^x)가 유효한 서명인지를 확인하며, 자신이 받은 α^y와 sigB(α^y, α^x)의 결과로 얻은 α^y이 같은지 확인하는 과정을 거치게 된다. 이 과정에서, Eve가 위조된 α^z를 보냈다면 서로의 키가 잘못된 것임을 알 수 있다.
STS에서는 Alice와 Bob은 Trent를 신뢰해야 하며, Trent와의 연결은 안전해야 한다.
Reference
Wade Trappe, Lawrence Washington, Introduction to Cryptography with Coding Theory, Second Edtion, PEASRSON Education
Alice와 Bob이 Encryption 함수 Ek를 사용하는 키 K를 생성하려고 한다고 하자. 키 교환은 Diffie-Hellman 키 교환 방식으로 이루어지지만, 여기에 디지털 서명 과정이 추가된다.
1. Alice와 Bob은 큰 Prime Number p와 Primitive Root α를 선택한다.
2. Alice는 1 ≤ x ≤ p - 2인 임의의 x를 선택하고, Bob도 마찬가지로 1 ≤ y ≤ p - 2인 y를 선택한다.
3. Alice는 α^x (mod p)를 계산하고, Bob도 α^y (mod p)를 계산한다.
4. Alice는 Bob에게 α^x를 보낸다.
5. Bob은 K ≡ (α^x)^y (mod p)를 계산한다.
6. Bob은 Alice에게 α^y와 Ek(sigB(α^y, α^x))를 보낸다.
7. Alice는 K ≡ (α^y)^x (mod p)를 계산한다.
8. Alice는 sigB(α^y, α^x)를 얻기 위해 Ek(sigB(α^y, α^x))를 decryption 한다.
9. Alice는 Trent에게 verB가 Bob의 검증 알고리즘이 맞는지 확인한다.
10. Alice는 Bob의 서명을 확인하기 위해 verB를 사용한다.
11. Alice는 Bob에게 Ek(sigA(α^y, α^x))를 보낸다.
12. Bob은 Trent에게 verA가 Alice의 검증 알고리즘이 맞는지 여부를 확인하고, 맞다면 verA를 사용하여 Alice의 서명을 확인하고 암호화를 decryption 한다.
이 방법이 어떻게 중간자 공격에서 안전할 수 있는가? 먼저, 7 단계까지는 Diffie-Hellman 키 교환과 동일한 방법으로 키 교환이 이루어지며, Eve가 키를 위조하기 위해 중간자 공격을 할 수 있다. 위조된 키로 Ek를 decryption 하면 sigB(α^y, α^x)를 얻게 되는데, Alice는 Trent에게 Bob의 검증 알고리즘 verB를 사용하여 sigB(α^y, α^x)가 유효한 서명인지를 확인하며, 자신이 받은 α^y와 sigB(α^y, α^x)의 결과로 얻은 α^y이 같은지 확인하는 과정을 거치게 된다. 이 과정에서, Eve가 위조된 α^z를 보냈다면 서로의 키가 잘못된 것임을 알 수 있다.
STS에서는 Alice와 Bob은 Trent를 신뢰해야 하며, Trent와의 연결은 안전해야 한다.
Reference
Wade Trappe, Lawrence Washington, Introduction to Cryptography with Coding Theory, Second Edtion, PEASRSON Education