공개키 암호화-2

창고지기·2022년 5월 4일
0

보안

목록 보기
3/5
post-thumbnail

Discrete Logarithm Problem (DLP)

  • 개념

    a,x a,x\space가 주어졌을 때 ax=b\space a^x=b는 계산하기 쉽지만
    a,b a,b\space가 주어졌을 때 x=logab \space x=log_ab\spacexx를 찾아내는 것이 어렵다는 것, 실수 범위에서는 대소 관계를 통해서 xx를 쉽게 찾을 수도있지만, '군'에서는 xx를 쉽게 찾을 수 없음

    x,g,px,g ,p 가 주어졌을 때 y=gx mod py=g^x\space mod \space p 를 만족하는 yy는 쉽게 찾을 수 있음
    g,y,pg,y ,p 가 주어졌을 때 y=gx mod py=g^x\space mod \space p 를 만족하는 xx는 쉽게 찾을 수 없음
    (one-way function)

ElGamal Encryption

위에서 언급한 DLP를 사용한 공개키 암호화 기법

  • Key
    • public: p,g,y,kp,g,y,k
      • p:p: prime
      • g:g<p g: g<p\space (generator of Zp,GCD(g,p)=1Z_p,GCD(g,p)=1)
        • 여기서 ggmod pmod\space p의 원시근을 의미

          Zp Z_{p}\space의 원시근 rr0<ap10<a\le p-1 인 모든 aa에 대하여 ZpZ_p내에 re mod p=ar^e \space mod \space p =a 를 만족하는 ee를 가지고있다.
          p=5p=5, r=3r=3 이라면 Z5Z_5 안에서 즉 mod 5mod\space 5상에서 3의 거듭제곱을 나열해보면
          31=33^1=3
          32=43^2=4
          33=23^3=2
          34=13^4=1
          모든 aa에 대응되는 모든값이 3의 거듭제곱 형태이므로 3은 modmod 5의 원시근이다

      • y:y=gx mod py: y=g^x\space mod \space p
      • k:k: 임의의 정수 k 주로 p1p-1을 사용
        • kk 값을 다르게 주면 같은 문자도 다르게 암호화 됨
    • private: x(x<p)x (x<p)

  • 암호화 C=(a,b)C=(a,b)

    a=gk mod pa=g^k\space mod \space p
    b=ykM mod p (M<p)b=y^k*M\space mod \space p\space (M<p)

  • 복호화

    M=bax mod pM=\frac{b}{a^x}\space mod\space p
    ax=gkx mod pa^x =g^{kx}\space mod \space p
    bax=ykMgkx=gkxMgkx=M\frac{b}{a^x}=\frac{y^k*M}{g^{kx}}=\frac{g^{kx}*M}{g^{kx}}=M

Rabin Encryption

모듈로 상에서 제곱근 값을 찾는 것의 어려움에 기반

C=M2 mod nC=M^2\space mod\space n

Simple Key Exchange

  • Simple example 1

    A가 B와 키를 공유하기를 원한다고 가정, 신뢰할 수 있는 제 3자를 통해서 키를 교환
    1) A->Lockmaster: EkeyA(IDAIDB)E_{keyA}(ID_A||ID_B)
    2) Lockmasket->A: EkeyA(newkeyEkeyB(newkey))E_{keyA}(newkey||E_{keyB}(newkey))
    3) A->B: EkeyB(newkey)E_{keyB}(newkey)

  • simple example 2

    A가 B와 키를 공유하기를 원한다고 가정, 로컬에서 세션키를 암호화해서 전달
    1) A->B: EkeyBpub(EkeyApri(newkey))E_{keyBpub}(E_{keyApri}(newkey))

Diffie-Hellman Key Exchange

이산 대수계산의 어려움에서 고안한 방법
세션키를 암호화하여 전달할 필요 없음

  • Process

    A가 B와 키를 공유하기를 원한다면
    소수 pp, 원시근 α\alpha를 공개하고 각자의 비밀값 Xa<PX_a<P Xb<PX_b<P 선택 후
    A: Ya=αXa mod pY_a=\alpha^{X_a}\space mod\space p 를 계산해서 B에게 YaY_a 전송
    B: Ya=αXb mod pY_a=\alpha^{X_b}\space mod\space p 를 계산해서 A에게 YbY_b 전송
    A: K=YbXa mod pK=Y_b^{X_a}\space mod\space p 계산
    B: K=YaXb mod pK=Y_a^{X_b}\space mod\space p 계산
    위의 두 식의 계산 결과는 같음, 따라서 같은 키를 공유하게 됨

profile
일단 창고에 넣어놓으면 언젠가는 쓰겠지

0개의 댓글