비트코인/암호학

[비트코인 암호학] 3.2 공개키와 개인키

라이튼 2022. 7. 20. 22:36
 

[비트코인 암호학] 3.1 공개키 암호화

[비트코인 암호학] 2.3 타원곡선의 스칼라 곱셈 [비트코인 암호학] 2.2 유한체에서의 타원곡선 [비트코인 암호학] 2.1 유한체 [비트코인 암호학] 1.3 타원곡선의 점 덧셈2 [비트코인 암호학] 1.2 타원

kwjdnjs.tistory.com

 지금까지 유한체 타원곡선을 다루면서 다음과 같은 변수들을 정리했었습니다.

  • a와 b는 타원곡선 방정식의 값으로 지금까지 a=0, b=7을 사용했습니다.
  • p는 유한체의 위수입니다.
  • G는 타원곡선 위의 한 점입니다.
  • n은 점 G의 군에 대한 위수입니다.

 

 해당 변수들의 값은 secp256k1에서 이미 정의되어 있습니다. 다음은 해당 값들을 16진수로 나타낸 것입니다.

 

  • a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  • b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
  • p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
  • G의 x좌표 = 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
  • G의 y좌표 = 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
  • n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

 

 이제 위 값들을 이용해 개인키에서 공개키를 생성해보겠습니다. 가장 먼저 개인키를 생성해야 합니다. 개인키는 자신이 사용하고자 하는 것을 사용해도 되지만 보안을 위해 무작위로 생성하는 것이 좋습니다. 공개키를 얻기 위해 개인키를 만들었다면 다음 식에 대입해 공개키를 구할 수 있습니다.

 위와 같이 타원곡선의 스칼라 곱셈을 이용하여 공개키를 쉽게 구할 수 있습니다. 미리 정의된 점 G에 개인키 d를 곱하면 공개키 P를 구할 수 있습니다. 타원곡선의 점을 스칼라 곱셈한 결과가 공개키이기 때문에, 공개키 P 역시 x좌표와 y좌표를 가진 타원곡선 위의 한 점이 됩니다.

 

 이러한 방식으로 공개키를 구할 수 있는 이유는 유한체 타원곡선의 스칼라 곱셈의 특성 때문입니다. d와 G를 이용한 스칼라 곱셈 값인 공개키 P를 구하기는 쉽습니다. 하지만 반대로 공개키 P와 생성점 G를 이용해 나눗셈을 하여 개인키 d를 구하는 것은 불가능합니다. 공격자가 할 수 있는 것은 존재할 수 있는 모든 d를 대입해가며 스칼라 곱셈을 수행하는 방법밖에 없습니다. 이러한 방식으로 개인키 d를 구하는 것이 사실상 불가능하기 때문에, 개인키를 해킹하는 것은 사실상 불가능하다고 할 수 있습니다. 물론 개인키 d가 추론하기 어려운 값이어야지만 해당 보안이 성립할 수 있습니다.

 

 지금까지 개인키를 이용해 공개키를 생성해봤습니다. 다음 글에서는 공개키와 개인키를 이용한 디지털 서명을 다루기 위해 먼저 디지털 서명이 무엇인지에 대해 알아보겠습니다.

 

[비트코인 암호학] 4.1 디지털 서명

 디지털 서명은 공개키 암호화를 이용하여 전송된 데이터를 증명하는 방법입니다. 예를 들어 A가 B에게 비트코인을 이체하려고 한다면, 먼저 A는 공개된 네트워크를 통해 비트코인이 들어있는

kwjdnjs.tistory.com