ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 공개키암호 - 배낭암호
    전공/컴퓨터보안 2020. 6. 4. 13:20

    공개키 암호

    공개키는 대칭키보다 굉장히 특별하게 수학적이기 때문에 종류가 대칭키만큼 다양하지는 않다.

    이러한 유닠-크한 암호인 공개키는 "트랩도어 단방향 함수"를 기본으로 하고 있다.

    함수 이름도 유닠-크한데, 간단하게 말하면 한쪽으로의 계산은 쉽지만 반대 방향은 계산이 어렵다는 뜻이다.

    물을 쏟기는 쉽지만 쏟은 걸 다시 담기는 매우 어려운 것처럼.

    즉, N = pq(p,q는 소수)일 때, p와 q를 알면 N의 값을 구하기는 굉장히 쉽지만 N값만 가지고 p와 q를 찾는 것은 굉장히 어렵다.

    대칭키에서는 평문은 P(Plaintext), 암호문은 C(Ciphertext)로 표기하였으나 공개키에서는 평문을 M(Message)라고 한다.

    공개키를 사용할 때에는 개인키(private key)와 공개키(public key)가 한 쌍을 이루어야 한다.

    <개인키로 암호화 - 공개키로 복호화>를 할 수도 있고,

    <공개키로 암호화 - 개인키로 복호화>를 할 수도 있다. 이 방식을 보통 서명(Sign)이라 한다.

    배낭암호

    배낭암호는 배낭 알고리즘(knapsack algorithm)에서의 배낭과 의미가 동일하다.

    배낭의 제한 무게에 물건들의 무게의 합이 딱 맞아떨어지게 넣는 방식이다.

    말보다 예시로 이해하는 게 더 쉽다.

    배낭에 들어가는 물건의 무게가 아래의 표와 같을 때

    배낭의 제한 무게가 172라고 하면 우리는 a0부터 a7까지 물건의 무게의 합이 정확히 172일 때를 찾아야 한다.

    가장 큰 수부터 넣어 계산을 해보면 172 = 85 + 13 + 47 + 27 이 나온다.

    즉, a0,a1,a4,a5 자리가 포함된다.

    이 때 배낭을 (a0,a1,a2, ..., a7) = (1,1,0,0,1,1,0,0) = (11001100) 와 같이 이진수로 표현을 한다.

    배낭암호에서는 이러한 나열을 '일반배낭'이라 부르며, 일반 배낭이 '공개키'가 된다.

    암호화, 복호화를 할 때 필요한 또 다른 개념 중에 '수퍼증가 배낭'이 있다.

    간단하다. 무게가 an + an+1 < an+2 를 만족하는 물건들의 집합이다.

    ex) 1, 3, 5(>4) , 10(>8), 30(>15), ...

    이제 실제로 구현하는 절차를 설명한다.

    수퍼증가 배낭을 일반 배낭으로 변환할 때 공개키와 암호키가 만들어진다.

    변환할 때는 두 가지 요소가 필요하다.

    1. 수퍼배낭의 물건에 곱할 수 m

    2. mod 연산의 피연산자가 될 n. 여기서 n은 수퍼증가 배낭의 모든 물건의 무게 합 보다 커야 한다.

    m, n과 수퍼증가 배낭이 개인키가 된다.

    공개키는 위 문단에도 언급했듯이 일반 배낭이다.

    실제 예시를 들어본다. 아래와 같은 수퍼 배낭이 존재한다.

    m과 n을 각각 41, 491로 정한다.

    2m = 2*41 = 82mod491

    3m = 3*41 = 123mod491

    7m = 7*41 = 287mod491

    14m = 14*41 = 83mod491

    30m = 30*41 = 248mod491

    57m = 57*41 = 373mod491

    120m = 120*41 = 10mod491

    251m = 251*41 = 471mod491

    개인키 : 수퍼배낭(2,3,7,14,30,57,120,251), 41(m), 491(n)

    공개키 : 일반 배낭(82,123,287,83,248,373,10,471)

    앨리스가 밥에게 평문 M인 150을 보내려고 할 때 배낭 암호를 적용시켜보자.

    먼저, 150을 이진수인 10010110 으로 바꾼다.

    이 값을 공개키(82,123,287,83,248,373,10,471)의 자리수에 대응시켜 1에 해당하는 물건값만 더한다.

    그러면 82, 83, 373, 10이 선택되며, 82 + 83 + 373 + 10 = 548이 되며, 548이 암호문 C가 된다.

    밥은 개인키인 수퍼배낭(2,3,7,14,30,57,120,251)과 m, n을 이용하여 복호화를 진행한다.

    먼저, C인 548을 C*m^-1 mod n 을 통해 개인키로 변환시킨다.

    계산하면 548*41^-1 mod491 = 548*12 mod491 = 193 이 된다.

    * 41x = 1mod491, x=12 => 41^-1mod491 = 12

    193은 수퍼배낭의 물건 무게들의 합이다. 계산해보면 193 = 120 + 57 + 14 + 2 가 된다.

    선택된 무게에 해당되는 물건을 1, 아닌 물건을 0으로 변환해 이진법으로 나타내면 10010110이 된다.

    이 값을 십진법으로 변환하면 원래의 평문 M인 150이 나오게 된다.

    '전공 > 컴퓨터보안' 카테고리의 다른 글

    합성 암호체계(hybrid cryptosystem)  (0) 2020.06.05
    공개키 암호 - 디피헬먼(DH)  (0) 2020.06.04
    공개키암호 - RSA  (0) 2020.06.04
    혼돈과 확산, 대칭키 암호  (1) 2020.06.04
    컴퓨터보안 개요  (0) 2020.06.04

    댓글

Designed by Tistory.