ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비대칭키 암호화
    Note 2021. 2. 22. 18:25

    암호화

    암호화 방식은 크게 대칭키, 비대칭키 방식이 있다. https, ssh 등 여러 곳에서 비대칭키(공개키 + 비밀키) 방식을 사용한다.

     

    대칭키

    대칭키는 암호화 복호화에 같은 암호키를 쓰는 방식이다.

     

    예를 들어 알파벳을 세 칸 옮기는 암호화 방식이 있다고 하자.

    (암호화 알파벳 + 3, 복호화 알파벳 - 3)

    암호화 : 알파벳 + 3
    
    a + 3 = d
    b + 3 = e
    c + 3 = f
    
    ...
    
    z + 3 = c

     

    이렇게 암호화한 khoor를 복호화하면 hello라는 것을 알 수 있다.

    복호화 : 알파벳 - 3
    
    k - 3 = h
    h - 3 = e
    o - 3 = l
    r - 3 = o

     

    이 방식의 치명적인 단점은 암호화/복호화 방식 둘 중 하나라도 털리면 암호가 해독될 수 있다는 것이다. 따라서 한쪽이 털려도 원리가 쉽게 파악되지 않는 비대칭키 방식을 사용한다.

     

    비대칭키

    비대칭키는 공개키와 비밀키로 이루어져 있다. 공개키와 비밀키의 기능은 완전히 같다.

    • 공개키로 암호화, 비밀키로 복호화
    • 비밀키로 암호화, 공개키로 복호화

     

    비밀키

    공개키, 비밀키 둘 다 알려지면 암호가 해독되므로 하나는 비공개로 보관한다. 두 키를 구분 짓기 위하여 비공개키를 비밀키라고 하고 나머지 하나를 공개키라고 한다.

     

    공개키

    상대와 서로 암호화/복호화를 하려면 두 명 다 키가 필요하다. 둘 중 하나의 키를 상대에게 전송해야 하는데 이때 공개키를 자유롭게 주고받을 수 있다(키 하나로는 복호화 불가능).

     

    https의 비대칭키 사용

    1. 서버에서 비밀키로 response 메시지를 전부 암호화해서 클라이언트에게 전달한다.
    2. 클라이언트는 해당 사이트의 인증서를 확인해서 인증기관으로부터 공개키를 발급받는다.
    3. 발급받은 공개키로 암호화된 해당 사이트의 response 메시지를 복호화한다.

     

    이 과정에서 서로 주고받는 http 메시지를 중간에 해커가 알 수 없다. 여기서 드는 의문점은 왜 공개키를 해커한테 뺏겨도 암호문이 해독되지 않는 것인가? 이것을 알기 위해서는 RSA 암호방식의 원리를 이해해야 한다.

     

    RSA 암호

    RSA는 창시자들의 이니셜을 따서 지었다(Ron Rivest, Adi Shamir, Leonard Adleman). 1983년에 특허가 등록되었고 2000년 9월 특허가 만료되어 현재는 자유롭게 쓸 수 있다.

     

    RSA 방식으로 암호화를 하기 위해선 먼저 키를 만들어야 한다. 그 과정은 다음과 같다.

    1.  소수 p, q를 를 준비한다.
    2. p - 1,과 각각 서로소인 정수 e를 준비한다.
    3. ed (p - 1)(q - 1)으로 나눈 나머지가 1이 되도록 하는 d를 찾는다.
    4. N = pq를 계산한 후, N e를 공개한다. 이들이 바로 공개키이다. 한편 는 숨겨두는데, 이 수가 바로 비밀키이다.
    5. 이제 p, q, (p-1)(q-1)는 필요 없거니와 있어 봐야 보안에 오히려 문제를 일으킬 수 있으니, 파기한다.

    공개키 (N = 33, e = 7)를 해커가 알아냈다고 하더라도 비밀키 d를 구하기 위해서는 중간과정인 L이 꼭 필요하다. 하지만 L을 구하려면 N=33을 두 소수로 인수분해 해야 한다.

     

    33은 작은 숫자이므로 인수분해가 쉽지만 몇백 자리 혹은 그 이상이 되는 두 소수의 곱은 인수분해 하기가 정말 어렵고 컴퓨터조차도 구하기 힘들어한다.

     

    구글에 RSA 암호를 해독하는데 걸리는 시간을 검색해 보면

     

    일반적인 컴퓨터에서 암호화 키를 해독하는 데는 약 300조년이 걸린다고 한다.

    'Note' 카테고리의 다른 글

    [css] ntn-child, ntn-last-child  (0) 2021.03.22
    Typescript  (0) 2021.02.26
    Unicode, UTF-8  (0) 2021.02.18
    호출 스케줄링  (0) 2021.02.15
    Redux  (0) 2021.02.08

    댓글