컴퓨터 보안 - [Key Management(2)]

윤형·2024년 12월 1일

Security

목록 보기
7/14

보안에는 명품 3대장이라고 불리는 기법이 있다.
RSA, PGP, 그리고 이번시간에 배워보고자 하는 Diffie Hellman이 있다.

Diffie-Hellman
두 사용자가 공개적으로 통신하면서 안전하게 비밀 대칭키를 만드는 알고리즘.

기밀성은 보장하고, 무결성과 인증은 다른 기법과 연계해야한다.

Diffie-Hellman은 이산대수의 문제를 이용한 알고리즘 기법이다.

기본적인 알고리즘은 물통의 색으로 이해할 수 있다.

  1. Alice와 Bob한테 공개적인 색이 있다.
  2. Alice와 Bob 각자 비밀 색이 있다.
  3. 각자 공개색이랑 비밀 색을 섞어서 새로운 색을 만든다.
  4. 서로에게 넘겨서 보여준다.
  5. 서로 교환한 물통에 각자의 비밀 색을 섞는다.
  6. 그러면 결론적으로 같은 색의 물통을 가지게 된다.

작동 원리

  • p,q: 큰 정수, 1<q<p, 모든 사용자에게 공개한다. (공개 색)
  • Alice는 임의로 a를 생성, A = q^a mod p를 계산한다. (비밀 색이랑 섞기)
  • Bob은 임의로 b를 생성, B = q^b mod p를 계산한다. (비밀 색이랑 섞기)
  • A와 B를 서로 교환한다.(물통 바꾸기)
  • 다시 임의 숫자로 mod를 해주면 결론적으로 q^ab mod p를 서로 가지게 된다.

실습 코드

#실제로 p,q는 엄청 큰 소수 값
p = 23
q = 5
a = 5
b = 15
#Begin
print("공개 값들 : ")
print("p	:", p)
print("q	:", q)

#Alice Send to Bob
A = (q**a) % p
print("\nAlice sends : " ,A)
#Bob send to Alice
B = (q**b) % p
print("/nBob send : ", B)

print("--------------")
print("비밀키 계산")

alice_share_secret = (B**a) % p
bob_share_secret = (A**b) % p

if alice_share_secret == bob_share_secret:
	print("성공")

취약점

Diffie-Hellman은 중간자 공격에 취약할 수 있다.

중간에서 주고받는 데이터를 훔쳐서 Alice에게는 bob인척, bob에게는 Alice인 척을 하는 것이다. 이는 사용자 인증을 하지 않아서 발생하는 문제기 때문에 전자서명 혹은 인증 기법을 합쳐서 보완할 수 있다.

  • 중간자 공격(man-in-the-middle attack)
    Diffe-Hellman은 매우 복잡한 프로토콜이지만, 제 3자가 x 또는 y 값을 알아내지 않아도 되기 때문에 중간에서 밥과 앨리스를 속이는 것이 가능하다.
    중간자 공격 절차
  1. 앨리스가 x를 선택한 후 R1=Gx를 계산하여 R1을 밥에게 전송
  2. 제 3자가 R1을 가로챈 후, z를 선택한 다음 R2=Gz mod N을 계산하여 R2를 앨리스와 밥에게 전송
  3. 밥이 y를 선택한 다음 R3=Gy mod N을 계산해서 R3을 앨리스에게 전송, R3을 제 3자가 가로챔
  4. 앨리스와 제 3자가 공유한 키 K1=Gxz mod N을 계산
  5. 제 3자와 밥은 공유한 키 K2=Gzy mod N을 계산

이 경우 앨리스와 밥은 제 3자와 공유한 키를 서로간의 공유한 키로 생각

요약

Diffie-Hellman은 서로간의 정보를 주고받지 않고, 비밀 대칭키를 교환하는 알고리즘으로 기밀성을 보장하지만, 무결성, 인증은 보장하지 못한다. 또한 중간자 공격에 취약하기 때문에 신원확인, 무결성 검사를 위해 전자 서명과 함께 사용하는 것이 좋아보임

profile
제가 관심있고 공부하고 싶은걸 정리하는 저만의 노트입니다.

0개의 댓글