처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.26 48

비밀번호를 5조각으로 나눠 보관한다? Shamir의 비밀 공유 원리

Hacker News 원문 보기
비밀번호를 5조각으로 나눠 보관한다? Shamir의 비밀 공유 원리

비밀을 안전하게 나눠 갖는 방법

혹시 이런 상황 상상해보신 적 있으세요? 회사 금고 비밀번호를 한 사람만 알고 있다고 하면, 그 사람이 갑자기 회사를 그만두거나 사고가 나면 큰일이잖아요. 그렇다고 다섯 명한테 똑같은 비밀번호를 다 알려주면 그중 한 명만 배신해도 끝나고요. 가장 이상적인 건 "다섯 명에게 조각을 나눠주고, 그중 세 명 이상이 모여야만 비밀번호가 복원되도록" 만드는 거예요. 한 명이나 두 명만으로는 아무 정보도 얻을 수 없어야 하고요.

이걸 수학적으로 깔끔하게 풀어낸 방법이 바로 샤미르의 비밀 공유(Shamir's Secret Sharing) 예요. 1979년에 이스라엘의 암호학자 Adi Shamir(RSA 알고리즘 만든 세 명 중 S에 해당하는 그분이에요)가 발표한 알고리즘인데, 거의 50년이 지난 지금도 비트코인 지갑 백업, 기업 키 관리, 분산 인증 같은 곳에서 현역으로 쓰이고 있어요. 최근에 사진/파일 암호화 서비스 ente.com 팀이 자기들이 이걸 어떻게 쓰는지 블로그에 정리하면서 다시 회자되고 있죠.

핵심 아이디어는 의외로 단순해요

중학교 수학 시간에 배운 거 하나 떠올려볼게요. 점 두 개가 있으면 그 두 점을 지나는 직선이 딱 하나로 정해지잖아요. 점 세 개면 그 세 점을 지나는 2차 곡선(포물선)이 딱 하나로 정해지고요. 일반화하면 k개의 점이 있으면 k-1차 다항식이 유일하게 결정돼요.

샤미르는 여기서 천재적인 발상을 했어요. 비밀을 다항식의 "y절편"(즉 x=0일 때 값)으로 숨겨놓는 거예요. 예를 들어 비밀이 1234라고 해보면, 1234를 y절편으로 갖는 어떤 2차 다항식 f(x) = 1234 + ax + bx²를 만들어요. a와 b는 랜덤으로 정하고요.

그다음 이 다항식 위의 점들을 여러 개 계산해요. f(1), f(2), f(3), f(4), f(5) 이런 식으로요. 그리고 이 점들을 다섯 사람한테 하나씩 나눠줘요. 각자는 자기 점 하나만 알고 있죠. 그런데 점 하나로는 2차 다항식을 절대 복원할 수 없어요. 두 개로도 안 되고요. 세 개가 모여야만 2차 다항식이 유일하게 정해지고, 그러면 x=0을 대입해서 비밀 1234를 복원할 수 있는 거예요.

이게 (k, n) 임계값 방식이라고 불리는데요. n개 조각을 만들어서 나눠주고, k개만 모이면 복원 가능한 구조예요. k-1개로는 비밀에 대해 "통계적으로 아무 정보도" 얻을 수 없다는 게 수학적으로 증명돼 있어요. 이게 진짜 강력한 부분이에요. "거의 못 푼다"가 아니라 "정보 이론적으로 완벽하게 안전"한 거거든요.

실제로는 유한체 위에서 계산해요

위 설명은 직관적인 이해를 위한 거고, 실제 구현에서는 실수가 아니라 유한체(finite field) 위에서 계산해요. 왜냐하면 실수로 다항식을 다루면 부동소수점 오차도 생기고, 무엇보다 "점 하나만으로도 비밀이 어느 정도 범위에 있는지" 추측할 수 있는 정보 누출이 생기거든요.

유한체라는 게 뭐냐면, 모든 연산을 어떤 소수 p로 나눈 나머지로만 다루는 세계예요. 예를 들어 p가 큰 소수라고 하면, 모든 덧셈과 곱셈이 mod p로 이루어져요. 이렇게 하면 다항식 위의 모든 점이 균등하게 분포하고, 공격자가 점 한두 개만 가지고 있을 때는 비밀이 0부터 p-1까지 어느 값이든 똑같이 가능성이 있는 상태가 돼요. 정말 아무 정보도 못 얻는다는 뜻이죠.

복원할 때는 라그랑주 보간법(Lagrange interpolation) 이라는 걸 써요. k개의 점이 주어졌을 때 그 점들을 지나는 k-1차 다항식을 계산하는 공식이에요. 식 자체는 좀 복잡해 보이지만, 컴퓨터한테는 일도 아니에요. 그래서 실제 구현은 수십 줄이면 충분해요.

어디에 쓰이고 있나

샤미르 비밀 공유가 활약하는 분야는 생각보다 많아요. 가장 유명한 건 비트코인 같은 암호화폐 지갑 백업이에요. 시드 문구 24개를 한 곳에 보관하면 잃어버릴 위험이 크고, 여기저기 복사해두면 누가 훔쳐갈 위험이 커지잖아요. 그래서 시드를 5조각으로 나눠서 가족, 변호사, 은행 금고, 클라우드, USB에 각각 두고 "3개만 모이면 복원되도록" 설정하는 방식이 인기예요. SLIP-39라는 표준도 이걸 기반으로 만들어졌고요.

기업의 마스터 키 관리에도 많이 써요. 데이터베이스 암호화 키나 루트 인증서 같은 걸 한 사람이 다 들고 있으면 위험하니까, 임원 5명에게 조각을 나눠주고 "3명이 동의해야 사용 가능"하게 만드는 거죠. HashiCorp Vault 같은 시크릿 관리 도구의 unseal 키도 이 원리로 동작해요.

ente.com 같은 종단간 암호화 서비스에서는 계정 복구에 쓰여요. 사용자가 마스터 패스워드를 잊어버렸을 때, 미리 신뢰하는 친구 몇 명에게 조각을 분산해놨다가 그 친구들의 도움으로 복구하는 식이에요. 회사가 사용자 데이터를 들여다볼 수 없으면서도 복구 옵션을 제공할 수 있게 되는 거죠.

다른 비슷한 기술들과 비교하면

비슷한 영역에 다중 서명(multisig) 이라는 기법도 있어요. 비트코인에서 자주 쓰는 건데, "3명 중 2명이 서명해야 트랜잭션 실행" 같은 식이에요. 차이점은 다중 서명은 "서명" 단계에서 동작하고, 샤미르는 "비밀 자체를 복원"하는 단계에서 동작한다는 점이에요. 다중 서명은 비밀(개인키)을 한 번도 한 곳에 모으지 않아서 더 안전한 측면이 있고, 샤미르는 복원 시점에 모든 조각이 한 곳에 모여야 한다는 약점이 있어요.

더 최근에는 임계값 서명(threshold signature) 이라는 기법이 발전하면서 "비밀을 한 번도 합치지 않고도 서명을 만들어내는" 방식이 가능해졌어요. MPC(다자간 연산) 기반인데, 샤미르의 아이디어를 더 정교하게 확장한 거라고 보면 됩니다.

한국 개발자에게 주는 시사점

실무에서 직접 구현할 일은 많지 않을 수 있지만, 알아두면 정말 든든한 도구예요. 예를 들어 사이드 프로젝트로 작은 SaaS를 만들 때 마스터 암호화 키를 어떻게 관리할지 고민하잖아요. 환경 변수에 박아두자니 한 곳에 다 들어 있어서 불안하고요. 이럴 때 샤미르 방식으로 운영자 3명에게 조각을 나눠주는 구조를 도입하면 보안이 훨씬 단단해져요.

Go의 hashicorp/vault/shamir 패키지나 자바스크립트의 secrets.js, Python의 pycryptodome 같은 라이브러리들이 잘 만들어져 있어서, 직접 수학을 구현할 필요는 없어요. 라이브러리만 잘 골라 쓰면 됩니다. 다만 롤 유어 오운 크립토(직접 암호 구현)는 절대 하지 말라는 원칙은 여기서도 그대로 적용돼요.

정리하며

샤미르의 비밀 공유는 "비밀은 한 곳에 다 두면 위험하고, 여러 곳에 똑같이 두는 것도 위험하다"는 딜레마를 우아한 수학으로 풀어낸 알고리즘이에요. 50년 전에 나온 기술이 아직도 현역인 이유는, 그만큼 본질적인 문제를 깔끔하게 풀었기 때문이겠죠.

여러분은 중요한 비밀번호나 시드 문구를 어떻게 보관하고 계세요? 종이에 적어서 금고에 넣어두시나요, 아니면 1Password 같은 매니저에 의존하시나요? 샤미르 방식으로 가족이나 친구한테 조각을 나눠주는 거 한 번쯤 고려해볼 만하지 않을까요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.