생활
이더리움에서 ecrecover는 무엇인가요?
이더리움에서 스마트컨트랙트에서 ecrecover로 메시지에 해당하는 주소를 출력하는것으로 조금만 알고 있는데 실제 어떻게 동작하는지와 어느 환경에 사용되는지 궁금합니다.
55글자 더 채워주세요.
1개의 답변이 있어요!
안녕하세요
솔리디티에서 ecrecover함수는 서명을 증명하는 함수입니다.
GPG와 비슷한 역할을 하는 함수라고 생각하시면 되겠네요.
여기서 서명은 타원곡선SECO256K1에 의해 정해집니다.
수학적인 부분은 질문에 포함되지 않으므로 설명은 생략하도록 하겠습니다.
우선 서명을 하는 쪽에서는 ecsign이라는 함수를 쓰는데요
서명 절차는 다음과 같습니다.
- 트랜잭션을 만든다
- 1~(n-1)중에 개인키를 정한다(SECO256K1에서는약 1.157e+77쯤됩니다.)
- 1~(n-1)중에 하나를 골라 기준점 G와 곱한다. = 서명 r (이 때 G와 곱한 고른 값을 k라고 합니다.)
- k^-1((트랜잭션 정보값)+r(개인키)%n = 서명 s
식은 대충 이렇습니다. 이렇게 만든 트랜잭션, 서명r, 서명s를 보냅니다.
다음으로는 서명을 확인하는 식은 다음과 같습니다.
((트랜잭션정보값)(s^-1%n)%n)G+(r(s^-1%n)%n)(공개키)
동작 과정은 대략 이렇습니다.
또한 주소가 리턴되는것은 단순히 공개키의 앞 40자리입니다.
결과적으로 ecrecover는 서명인증-> 맞을경우 공개키에서 주소추출, 오류시 0 인 구조라고 할 수 있겠습니다.