본문 바로가기
블록체인/블록체인이란?

비대칭 키 암호 방식 알고리즘 - RSA, 타원 곡선 알고리즘

by 제이제이_은재 2022. 6. 20.
반응형

 

💡비대칭 키 암호 방식 알고리즘

 

오늘날 사용되는 비대칭 키 암호 방식 알고리즘은 RSA 암호 방식(소인수 분해)과 타원곡선 알고리즘이 있다.

 

✓ RSA 암호 방식 (소인수분해)

 

RSA 암호 방식은 두 개의 소수를 곱하여 얻어낸 계수를 사용해 공개 키와 개인 키를 생성한다. 이 방식은, 아주 큰 수는 소인수분해 하는 것이 어렵다는 것에 기반을 둔 방식이다. 그렇기에, 큰 수의 소인수분해를 빠르게 할 수 있는 알고리즘이 발견된다면 RSA 암호 방식은 더 이상 쓰이지 않을 것이다. RSA 방식의 가장 중심은 '큰 숫자를 소인수분해하는 것이 어렵다' 이다. 실제로11438162575788867669265779976146612010218296672124236256256184293570693524573389783059712356395870505898907514899290026879 라는 92자의 숫자를 소인수 분해하려는 움직임이 있었고, 1993년 8월부터 1600대의 컴퓨터를 도입하여, 8개월이라는 시간이 걸려서 아래 결과를 도출 했다.

 

A = 349052951084765094914784961990389813341776463849338784390820577

B = 3276913299326670954996158819083446141131776429679942539798288533

 

여기서 놀라운 것은 이 두 숫자를 곱하는 것은 아주 쉽다는 것이다. 이러한 점들을 이용해, 개인 키 암호방식을 구현할 수 있다.

 

개인 키 * 개인 키 = 공개키

-> 개인 키와 개인 키를 곱하는 것은 아주 쉽기에, 공개 키를 유추할 수 있다.

-> 그러나 공개 키를 소인수분해하려면 엄청난 시간이 걸리기에, 개인 키를 유추할 수 없다.

-> 공개 키를 전달하여 암호화를 하고, 개인키를 사용하여 복호화를 할 수 있다.

 

 

✓ 타원 곡선 알고리즘

 

타원 곡선 알고리즘은, 비트코인의 비대칭키 알고리즘으로 유명하다. RSA보다 짧은 키의 길이와, 빠른 연산 속도를 가지지만 동일한 수준의 보안 강도를 가지고 있기 때문에 RSA의 대안으로 나왔던 알고리즘이다. 타원곡선 알고리즘을 간단하게 설명하자면, 위의 RSA와 마찬가지로 유한한 시간 이내에 계산이 가능하지만, 실제로 계산하기엔 너무 큰 시간을 할애한다는 점을 중점으로 두고 있다.

타원 곡선은 y^2=x^3+ax+b 를 만족하는 (x,y) 점들의 집합을 의미하며 x축을 중심으로 대칭이 되는 곡선을 말한다. 그리고 타원곡선 그래프에 찍힌 임의의 점에 대한 이산 로그를 구하는 것이 타원곡선 알고리즘이다. 이 암호화를 통한 경우의 수는 10^77로, 실제로 계산하기란 거의 불가능하다. 

 

아래의 예시에서, P와 Q의 덧셈은 점P 와 Q를 지나는 직선이 타원과 만나는 제 3의 교점 -R을 x축으로 대칭시킨 R로 정의한다. P와 Q가 같은 경우에도, P 점에서 타원곡선으로 이은 교점을 -R의 X축인 R로 정의한다. 

 

그리고, 이 타원곡선 알고리즘을 N번 덧셈 연산을 한다면 개인 키를 생성 할 수 있다.

 

A(임의의 점, 개인 키) * B(이동 횟수, 개인 키) = C(결과 값, 공개 키)

 

임의의 점으로부터 타원곡선 덧셈 연산을 하고, 나온 결괏값을 다시 임의의 점으로 지정하여 타원곡선 덧셈 연산을 한다. 그렇게 N번의 덧셈 연산을 하여 나온 결괏값이 공개키가 된다. 이 결갓값을 가지고 임의의 점 A와 이동 횟수인 B를 찾는다는 것은 매우 어렵다. 또한, 비트코인의 개인 키에 해당하는 B인 이동 횟수는 2^256승의 경우의 수 안에서 무작위로 생성되기 때문에 개인 키를 예측한다는 것은 사실상 불가하다. 2진수로 표현하게 되면 매우 길어지기 때문에 보통 16진수의 64자리로 표현하게 되는데, 이것이 블록체인에서 흔하게 볼 수 있는 그 문자열이다. 

 

df6724dcf00c43fa0e000a01792fc830e77a7f77483376f98fbcd00203890988

 

공개 키도 마찬가지로, 결괏값인 C를 사용하여 보통 지갑 주소로 활용하지만, 보안과 길이 측면서 한 번 더 해시한 값을 활용한다.

반응형

댓글