본문 바로가기
블록체인 이론

암호학

by gun_poo 2024. 2. 19.

공개키

이더리움 공개키는 타원곡선에 있는 점으로 타원 곡선 방정식을 만족하는 x와 y좌표의 집합을 의미한다.

더 간단히 이더리움 공개키는 함께 결합된 2개의 숫자. 이 숫자는 개인키로 부터 단 한방향으로만 계산 가능하다.

즉 개인키가 있는 경우 공개키를 계산하기는 쉽지만 공개키에서 개인키를 계산할수는 없다.

K = k *G
k는 개인키, G는 생성자 점(상수), K = 공개키

단방향 수학 함수이기 때문에 K를 G로 나누어 개인키 k를 계산할수없다.

 

이더리움은 secp256k1이라는 정확한 타원 곡선을 이용한다.

 

공개키 생성

무작위로 생성한 숫자 k 형태의 개인키로 시작하여 생성자 점 G라고 하는 곡선의 미리 결정된 점에 개인키를 곱하여 곡선상 다른점,

즉 대응하는 K 공개키를 생성한다

생성자 점 G는 secp256k1 표준의 일부로 지정되어있다. 해당 곡선에서 파생된 모든 키는 동일한 점 G를 사용한다.

생성자 점은 모든 이더리움 사용자에 대해 동일하기 때문에 G, k를 곱한 결과는 항상 K로 동일하다.

k * G는 G + G + G + .... G (k번 반복)과 동일하다. 

요약하자면 개인키로 부터 공개키를 생성 하기 위해 생성자 G를 그 자체에 k번 추가한다.

 

암호화 라이브러리는 타원 곡선 곱세을 사용해 K를 계산한다. 결과 공개키 K는

K = (x,y)로 정의된다.

 

이더리움은 압축되지 않은 공개키만을 사용하고 그에 따른 접두어는 16진수 04이다.

 

정리

 

공개키 생성 과정

 

1. 개인키 생성: 먼저, 무작위로 생성된 숫자 k를 개인키로 선택. 이 값은 비밀로 유지되어야 하며, 타원곡선 암호화에서 가장 중요한 부분.

 

2. 생성자 점(G): secp256k1 타원곡선에는 미리 결정된 고정된 점 G가 있다. 이 점은 모든 이더리움 사용자에 대해 동일하며, 공개키를 생성하는 데 사용된다.

 

3. 공개키 계산: 개인키 k와 생성자 점 G를 곱하여 공개키 K를 계산한다. 수학적으로 이는 K = k * G로 표현된다. 이 과정에서 k번 G를 자기 자신에게 더하는 것과 같다. 이 연산은 타원곡선 위에서 정의된 점 덧셈을 사용한다.

 

4. 결과: 계산된 공개키 K는 타원곡선 위의 또 다른 점으로, (x, y) 좌표의 형태로 표현된다. 이 좌표는 공개적으로 공유될 수 있으며, 이더리움 주소의 생성에 사용된다.

 

압축되지 않은 공개키

 

이더리움은 압축되지 않은 공개키 형식만을 사용한다. 이 형식에서 공개키는 접두어 04로 시작하며, 이어서 x와 y 좌표가 16진수 형태로 나타난다. 예를 들어, 공개키가 04 + x좌표 + y좌표의 형태를 가진다. 이 접두어는 공개키가 압축되지 않았음을 나타낸다.

 

단방향성

 

k * G = K 연산은 단방향 함수. , K G 주어졌을 , k 계산하는 것은 계산상 불가능하다는 것을 의미.  특성은 타원곡선 암호화의 보안을 보장하는 핵심 요소이다. 공개키로부터 개인키를 역산하는 것은 현실적으로 불가능하기 때문에, 사용자의 개인키는 안전하게 보호된다.

 

암호화 해시 함수

이더리움 공개키를 주소로 변환하는 작업에서 해시 함수가 일부를 차지한다.

해시함수는 임의 크기의 데이터를 고정된 크기의 데이터로 매핑하는데 사용할수 있는 모든 함수를 일컫는다.

암호해시함수는 임의 크기의 데이터를 고정크기의 비트 열로 매핑하는 단방향 해시 함수이다.

암호화 해시 함수는 주요 속성을 가진다.

  • 결정론
    • 주어진 입력 메세지는 항상 동일한 해시 결과를 생성
  • 검증성
    • 메세지의 해시 계산은 효율적(선형 복잡성)
  • 비상관성
    • 메세지에 작은 변화는 해시출력을 광범위하게 변경해야해서 원본 메세지의 해시와 상관관계가없다.
  • 비가역성
    • 해시로부터 메세지를 계산하는 것은 불가능, 모든 가능한 메세지에 대한 무차별 검색
  • 충돌방지
    • 같은 해시 결과를 생성하는 2개의 서로 다른 메세지를 계산하는것은 불가능

이더리움 암호화 해시 함수 keccak-256

이더리움 주소

이더리움 주소는 keccak256 단방향 해시 함수를 사용하는 공개키 또는 컨트랙트에서 파생한 고유 식별자이다.

이더리움주소는 16진수이며 공개키 keccak256 해시의 마지막 20바이트에서 파생한 식별자이다.

 

요약

  • 개인키 생성: 무작위로 안전한 난수 생성기를 사용하여 개인키를 생성. 개인키는 256비트의 임의의 값으로 구성되며, 이것이 바로 사용자의 자산을 제어하는 열쇠.
  • 타원 곡선 곱셈: secp256k1 사용하여 개인키를 이용하여 공개키를 계산. 이 과정은 개인키와 타원 곡선 위의 점들을 연산하여 공개키를 생성하는 것을 포함.
  • 주소 도출: 공개키를 Keccak256 또는 SHA-3 같은 해시 함수에 입력하여 해시 값을 생성. 그런 다음, 해시 값을 적절한 방식으로 가공하여 이더리움 주소를 생성합. 주소는 보통 공개키의 부분을 취하여 생성되며, 체크섬이 추가된 Base58 또는 Base64 인코딩을 거친다.

 

타원 곡선 그래프 내용 링크

https://blockgun.tistory.com/65

댓글