매달 MetaMask 보안 책임자 Luker가 여러분이 알아야 할 최신 암호화폐 공격과 새롭게 부상하는 위험에 대해 보고합니다.
2022년 5월 호에서는 MetaMask의 HackerOne 버그 바운티 프로그램 출시, MetaMask 의존성 호환성 향상을 위한 Endo의 import.meta 및 __dirname 구현, 그리고 MetaMask Flask에서 다자간 연산(MPC) 서명을 시연하는 분산 키 생성 프로토타입 snap을 다루었습니다. 아래에서 자세한 내용을 살펴보세요. 그 전에 먼저...
주목할 STEM 선구자: RSA 공동 발명자이자 비밀 공유 기법 창시자, Adi Shamir
Adi Shamir는 이스라엘의 암호학자로, 1977년 Ron Rivest, Leonard Adleman과 함께 RSA 알고리즘을 공동 발명했습니다. 이는 최초의 실용적인 공개 키 암호 시스템으로, 세 사람은 2002년 튜링상을 수상했습니다. 1979년에는 "비밀을 공유하는 방법(How to Share a Secret)"을 발표하며 Shamir의 비밀 공유 기법을 소개했습니다. 이 기법은 비밀을 여러 조각으로 나누어, 일정 수 이상의 조각만 있으면 원래의 비밀을 복원할 수 있는 방식입니다. 이 특성은 본 보고서에서 다루는 분산 키 생성 작업의 근간이 됩니다.
MetaMask, HackerOne 버그 바운티 프로그램 출시
MetaMask는 2022년 6월 HackerOne에 버그 바운티 프로그램을 출시하며, 보안 연구자들이 MetaMask 제품의 취약점을 공식적으로 보고할 수 있는 채널을 열었습니다.
Endo, import.meta 및 __dirname 구현으로 MetaMask 의존성 호환성 향상
2022년 4월 Endo의 CommonJS 지원 작업이 진행되면서, 엔드투엔드 테스트 결과 인기 모듈 실행의 주요 장애물이 import.meta.url 및 __dirname 지원 부재임이 확인되었습니다.
2022년 5월 3일 Agoric, MetaMask, Moddable 간의 회의에서 모듈 임포트 과정 중 import.meta를 처리해야 하는 시점에 대한 합의가 이루어졌습니다. importMetaHook 개념이 Compartment 명세에 도입되었습니다. 이 훅은 정적 분석을 통해 모듈이 import.meta에 접근한다고 판단될 때만 호출됩니다. Node.js가 resolve 함수를 해당 위치에 연결하며 생성 비용이 크기 때문에, 결과가 실제로 사용될 가능성이 있을 때만 훅을 호출하는 것이 바람직합니다.
import.meta 구현은 완료되었습니다(명세 이슈, 구현 PR). 남은 작업은 Endo에서 기본적으로 import.meta.url을 모듈에 전달하는 기능을 구현하는 것입니다. __dirname 구현도 완료되었으며(PR), 정확성과 Windows 경로 지원을 보장하기 위해 여러 차례 반복 작업을 거쳤습니다.
또한, .js 파일의 기본 모듈 타입 가정을 변경하는 중첩 package.json 파일에 대한 지원이 추가되어, compartment-mapper가 CommonJS와 ES 모듈 명세를 모두 지원하도록 설계된 복잡한 구조의 패키지를 처리할 수 있게 되었습니다(소스).
__esModule 동작 지원은 현재 보류 중입니다. 두 차례의 구현 시도 모두 엔드투엔드 테스트 점수가 오히려 낮아지는 결과를 초래했습니다. 세 번째 접근 방식인 SES 내부 ThirdPartyModuleInstance에 지원 로직을 배치하는 방법은 논란의 여지가 있는 것으로 평가됩니다. 해당 기능은 이슈 #927에서 추적 중입니다.
분산 키 생성 프로토타입 snap, MetaMask Flask에서 MPC 서명 시연
다자간 연산(MPC) 기능 개발에 진전이 있었습니다. 팀은 기존의 개념 증명(PoC) WebAssembly(WASM) 바인딩을 기반으로 MetaMask Flask에서 사용 가능한 프로토타입 snap을 제작했으며, 이를 통해 분산 키 생성(DKG)과 메시지 서명을 시연합니다. 이 snap은 키 생성 및 서명 증명 저장 외에도 키 공유의 내보내기 및 가져오기를 지원합니다.
내부적으로 이 패키지는 GG2020(Gennaro and Goldfeder 2020, 논문)의 구현체를 활용합니다. GG2020은 참여자들이 동시에 온라인 상태일 필요 없이 비동기적으로 참여할 수 있는 비대화형 온라인 단계를 지원하며, 이탈하는 참여자를 효율적으로 감지할 수 있는 프로토콜입니다.
다음 단계로는 snap 코드에서 키 공유의 수동 암호화를 제거하기 위해 snap_manageState에 암호화 지원을 추가하고, 이후 트랜잭션 서명 지원을 추가할 예정입니다. 프로토타입은 tss-snap 저장소에서 추적 중입니다(최초 ecdsa-wasm으로 공개).
MetaMask의 2022년 5월 암호화폐 보안 보고서에서는 MetaMask 모듈 호환성 체인을 위한 Endo의 import.meta 및 __dirname 구현과, MetaMask Flask에서 다자간 연산 서명을 시연하는 분산 키 생성 프로토타입 snap을 다루었습니다. 생태계 전반의 더 많은 위협, 트렌드, 안전 유지 팁을 확인하려면 MetaMask 암호화폐 보안 보고서의 이전 호를 살펴보세요.