블록체인에서 암호화는 비대칭 방식을 사용합니다.
비대칭 암호화란 암호화 할 때 사용하는 키와 복호화 할 때 사용하는 키가 다른 암호 체계를 말합니다.
이것은 대부분 우리가 주로 알고 있는 Public Key와 Private Key를 말합니다.
Public Key와 Private Key 둘다 암호화가 가능한데요, Public Key로 암호화 한 것은 Private Key로 복호화가 가능하고, Private Key로 암호화 한 것은 Public Key로 복호화가 가능합니다.
이 두가지 방법은 상황에 따라 다르게 쓰입니다.
Public Key로 암호화를 하는 경우
- 기밀이나 비밀 정보를 전달하는 경우 사용됩니다.
- 기밀을 특정 누군가에게 보내야 하는 경우 그 누군가로 부터 Public Key를 전달 받아서, 정보를 암호화 합니다.
- 이 정보는 Private Key가 있어야만 복호화가 가능하므로 중간에 암호화된 정보가 털리더라도, Private Key가 없으면 복구를 할 수 없습니다.
- Private Key가 있는 사람은 암호화 된 내용을 받아서 복호화 하여 정보를 읽을 수 있게 됩니다.
Private Key로 암호화를 하는 경우
- 누군가가 자신이 서명한 정보가 맞다는 것을 증명 할 때 사용합니다.
- 어떤 정보를 Private Key를 가진 사람이 암호화를 하고, 암호화 된 정보를 서명(Signature)한 데이터와 암호화하려고 했던 정보를 공개합니다.
- 이 정보는 공개된 Public Key를 알고 있는 누구라도 복호화가 가능하기 때문에 이 정보는 Private Key를 가진 사람이 암호화 했다는 사실을 증명 할 수 있습니다.
- Private Key를 가지고 있지 않은 사람이 정보 부분만 바꾼다면 서명(Signature)가 변경 되기 때문에 Public Key로 복호화를 할 수 없게 됩니다.
- 일반적으로 알려진 전자서명의 경우 이러한 방식을 사용합니다.
비대칭 키의 종류
- RSA : 소수(Prime Number)을 사용
- ECC : 타원 곡선 암호(이더리움에서 사용되고 secp256k1 타원곡선을 사용)
ECC 암호화 테스트 사이트 : https://paulmillr.com/noble
이더리움 지갑 주소
- 32바이트 랜덤 값을 생성하여 Private key를 생성합니다.
- Private Key에서 Public Key유도가 가능한데,
- Keccak-256 해시 알고리즘(32bytes)으로 Public Key를 해싱한 값에서 앞의 12 Bytes를 버린 값을 지갑 주소로 사용(남은 20bytes)
서명 과정
검증 과정(Recovery)
- 메세지 원본과 r, s, v 값으로 퍼블릭 키를 도출 가능합니다.
- 퍼블릭 키를 해싱하고 뒤의 20Byte만 추출하면 지갑주소랑 동일해져야 합니다.