- 운도 좋았고 만족도가 가장 높았던 프리랜서 세번째 과제
- threshold ECDSA와 Internet Computer
- Reference : Design and analysis of a distributed ECDSA signing service
우유니에서 만난 세번째 클라이언트
로스앤잴레스에서 두번째 클라이언트와 작업을 마치고 우리는 남미여행을 시작했다. 남미의 첫 여행지는 멕시코의 칸쿤이었다. 칸쿤은 신혼여행지로 많이 꼽히는 휴양지인데 미국서부 여행은 차를 타고 오랜시간 이동해야했던 터라 힘들거라고 예상해서 쉬어가는 장소로 넣은 계획이었다(매우 현명한 생각이었다.). 남미에서 처음에 칸쿤(멕시코)-이카(페루)-쿠스코(페루)-코파카바나(볼리비아)-우유니(볼리비아) 까지 일정이 3주 정도 잡혀있었다. 일이 끊기고 우유니에서 일이 다시 들어오기까지 거의 3주가량 걸린 것이다. 이때 당시에 나는 갑자기 수입이 끊긴터라 굉장히 불안한 심정이었다. 하지만 일을 하는 것은 부차적인 수입을 위해 하는 것이고 그것 때문에 여행기분을 망치고 싶지 않아서 애써 불안감을 떨쳐냈다. 여행하기 전부터 일을 제대로 시작해보려고 맘먹고 한 것이 아니고 그냥 한번 해보자는 생각으로 했던건데 그래도 수입이 있다가 다시 없어지니 오히려 불안감이 생겼더랬다.
마음을 다잡고 여행에 집중하면서 내 시간과 페이스를 찾기 위해서 나는 논문을 읽고자했다. 근데 마침 두번째 과제를 수행하는 중에 연락이 왔었던 클라이언트가 있었고, 해당 클라이언트가 제안한 논문이 threshold ECDSA를 블록체인에서 구현한 논문이었어서 나로써는 굉장히 흥미가 이끌렸고 이 논문을 그냥 읽어보기로했다. 그러니까 사실은 클라이언트와 같이 일을 하려고 논문을 읽은게 아니라 내가 관심이 생겨서 읽게 된 것이다.
논문을 읽고나서 보니 그제서야 클라이언트가 가진 의문을 나도 갖게되었고, 진심으로 클라이언트가 그 문제를 해결했는지 순수하게 궁금해졌다. 메시지를 보내서 질문을 했더니 아직 해결못했더랬다. 재밌는건 이때부터였다. 그 때 나랑 와이프는 우유니에 있었고, 밖이 겨울처럼 추웠어서 숙소에 난로를 켜두고 이불이 겹겹이 덮여있는 침대 위에서 쉬고 있었다. 나는 클라이언트에게 논문을 읽고난 내 생각을 전달했고, 클라이언트는 깜짝 놀랬다. 아직 계약을 시작도 안했는데 알아서 논문 읽고 혼자 연구하고 있었으니 클라이언트 입장에서는 너무 고마운(?) 일을 하게 된 것이다. 그런 나의 행동이 클라이언트에게 굉장한 호감을 사서 그날 계약을 하게 되었다. 무려 시급 30달러로 시작한 일이었다. 그 이후 시급은 조금 더 올라서 40달러까지도 받았다.
Internet Computer의 Threshold ECDSA
클라이언트가 요구한 과제는 Internet Computer의 Jens Groth와 Victor Shoup이 개발한 분산화된 비동기적인 시스템 환경에서 사용할 수 있는 threshold ECDSA 기법을 더 빠르게 최적화하는 것이었다. 클라이언트가 논문을 읽었을 때 궁금했던 것은 threshold ECDSA 기법에서 bottleneck인 Multi-Party Computation(MPC) 중에서도 shared secret끼리 곱셈하는 부분을 없애도 괜찮은가 그리고 실제 코드 상에서 이 부분을 삭제해서 구현할 수 있는가 였다. 나도 똑같은 의문을 갖기 시작했다. Shamir secret sharing 방법을 기반으로 MPC를 실행하는데 서명 값을 계산하는 과정에서 왜 랜덤값을 곱하는지 당시에는 의문이 들었다. 랜덤값이 불필요한 것처럼 보였다. 그래서 클라이언트의 말대로 랜덤 값을 사용하지 않는 버전으로 코드를 수정해주었다. 코드를 수정하는데 대략 2주 조금 안걸렸던 것으로 기억하는데 한주당 20시간~30시간 사이로 일했으니 꽤 많이 벌었다.
안전성 검증을 위한 계약 연장
코드를 수정해서 클라이언트가 원하는대로 돌아가는 것을 보여주었더니 클라이언트의 나에대한 신뢰도는 더 급격히 상승했다. 급여는 40달러로 올랐고, 클라이언트는 추가로 암호 기법을 개발하는데 참여해달라고 요구했다. 난 당연히 승낙했다. 그런데 한가지 찝찝한 점은 랜덤 값을 곱하는 부분을 빼도 과연 안전성에 영향이 없을까 하는 것이었다. Victor Shoup 교수는 나도 알정도로 암호분야에서 유명한 분인데 쓸모없이 그것을 넣지는 않았을 것 같았다. 나는 단순히 랜덤값이 존재하는 이유는 Byzantine Fault Tolerance(BFT) 조건을 만족시키기 위한 것이라고 생각했고(클라이언트가 처음에 그렇게 이해하고 나한테 설명했었다.), 클라이언트가 서명 기법을 사용하는 환경은 블록체인 네트워크가 아니기 때문에 제외해도 된다고 생각했던 것이다. 사실 이 부분은 애초에 클라이언트가 구현을 먼저 부탁했었기에 안전성에 어떤 영향을 주는지 크게 생각해보지 않았었다.
나는 클라이언트에게 내가 다음 해야할 일에 관해 제안을 했다. 우리가 아직 안전성 검증을 제대로 해본적이 없으니 내가 논문을 더 꼼꼼히 읽어보고 안전성에 어떤 영향이 있는지 더 구체적으로 분석해보겠다고 했다. 그랬더니 당연히 클라이언트는 흔쾌히 승낙했다. 안전성이야 말로 그들의 사업에 있어서 굉장히 중요한 요소니까 당연히 중요한 일이었다.
재밌는 것은 내가 클라이언트에게 안전성 검증을 위해서 다른 기업에게 돈을 주고 부탁한적이 있느냐고 물었더니 당연히 있다고 했다. 안전성 분석 리포트를 받아보니 왠걸 소스코드에 대한 단순 취약점 분석을 해놓은 것이었다. 심지어 가장 critical하다고 판단된 취약점은 랜덤 seed를 deterministic하게 생성하는 것 정도였다(아니 이건 누가봐도 테스트 과정에서 생긴 실수잖아..). 안전성 분석을 맡긴 그 기업에게 엄청난 돈을 주었을 것으로 예상하는데 내가 본 리포트는 대학생들도 쓸 수 있을 것 같았다.
그러니 안전성 분석이라는 이 일은 나는 돈도 많이 벌면서 내가 좋아하는 일해서 좋고, 클라이언트는 적은 돈으로 진심을 다해 검증해주는 박사에 준하는(?) 전문인력이 생겨서 좋은 일이 된 것이다. 지금 생각해봐도 프리랜서 일을 하면서 가장 만족도가 높았던 일이었다.
그렇게 기분이 좋을때 나와 와이프는 아르헨티나의 살타에 있었다. 살타는 짧은 시간동안 머물렀지만 아직도 나와 와이프에게 너무 좋은 기억으로 남아있다. 살타의 물가는 정말 미치도록 싸서 엠파나다 하나가 천원이 안했다. 엠파나다 몇개씩 먹어도 배부르게 너무 싼 가격에 잘 먹었고, 단돈 몇만원으로 미친듯이 맛있는 스테이크 집에 가서 스테이크와 와인을 먹었는데 너무 행복하게 먹었던 기억이 있다. 그날 아침에는 카페에 가서 나는 프리랜서 일을 만족스럽게 하고 있었고, 돈을 벌어 뿌듯하였으며 먹는 것도 너무 행복해서 좋은 기억으로 남아있다.
랜덤값을 곱하는 것은 Masking을 위한 것
논문을 봐도 안전성에 어떤 영향이 있는지 바로 보이진 않았다. 그래서 안전성 증명을 해놓은 파트를 중점적으로 읽었는데, 이들이 안전성 증명을 한 공격 모델이 Universal Composability Framework(UC framework)였다. 간략히 설명하면 분산 환경이 아닌 다른 환경에서도 공격자를 대상으로 똑같이 simulation할 수 있는지를 증명하는 것이었다. 그리고 그 증명에 랜덤값을 곱한 것이 사용되었다. 즉, 기법 자체에서는 랜덤값을 곱했다가 다시 나눠서 없애는게 아무런 의미가 없는 것처럼 보여도 안전성 증명에서는 사용되고 있었던 것이다. 지금 당장 공격방법이 생각나지 않더라도 해당 논문의 안전성 증명이 수정된 기법에서는 적용되지 않기 때문에 랜덤값이 빠진 수정된 기법이 안전하지 않거나 새로운 안전성 증명을 만들어야한다는게 내 생각이었다.
고심끝에 내린 결론은 랜덤값을 사용하지 않으면 안전하지 않다는 것이었다. 랜덤값은 threshold 기법에서 다른 참여자에게 나의 비밀값을 노출시키지 않기 위해 마스킹 역할로 사용한 것이기 때문에 이게 없어지면 내 랜덤값이 노출된 다는 것이고 이는 당연히 안전하지 않은 것이었다. 이러한 사실을 발견하고 난 뒤에는 마스킹 없이 진행했을 때 각자 shared secret이 노출되므로 안전하지 않은 것이 당연하게 보였다. 그 전까지 왜 이런 당연한 사실을 발견하지 못했는지 조금은 스스로가 아직 실력이 부족하다고 느껴졌던 것 같다.
그럼에도 불구하고 당연히 나는 돈벌어서 좋고 배운게 있어서 좋아서 일석이조로 만족스러웠다. 이 모든걸 알고보니 내가 마치 미리 안전성에 문제가 있다는 사실을 알고 숨겨서 더 많은 돈을 빼먹은 악당처럼 보일 수도 있겠으나, 믿거나 말거나 나는 최대한 빠른시간내에 정직하게 과제를 수행하고자 노력했다는 것을 알아주면 좋겠다.
Universal Composability Framework에 관심이 있다면 Ran Canetti의 논문을 읽어보면 좋겠다. 2001년에 제시된 개념이라 꽤 오래전부터 존재했던 모델임을 알아두자.