5P by GN⁺ | ★ favorite | 댓글 1개
  • Horcrux는 파일을 암호화된 horcrux 조각으로 나누고, 비밀번호를 기억하지 않아도 원본 파일을 복원할 수 있게 하는 CLI 도구
  • 큰 민감 파일을 암호화해야 하지만 몇 년 뒤 비밀번호를 기억하지 못할 수 있는 사용자, 여러 채널로 파일을 전송해 공격자의 가로채기 가능성을 크게 낮추려는 사용자를 위한 용도
  • split은 파일을 나눌 때 생성할 조각 수와 원본 복원에 필요한 조각 수를 입력받는 방식이며, 예시는 5개 조각 중 임의의 3개로 복원 가능한 구성
  • bind는 horcrux 조각이 있는 디렉터리에서 원본 파일을 다시 묶는 명령이며, 디렉터리를 인자로 전달하는 방식도 가능
  • 내부 방식은 Shamir Secret Sharing Scheme으로 암호화 키를 여러 부분으로 나누고, 정해진 임계값(threshold) 이상의 조각이 있을 때 원래 키를 재구성하는 구조
  • 키 생성은 Go 표준 라이브러리의 crypto/rand Read 함수를 사용하며, Shamir 구현은 Hashicorp의 vault repo 구현을 각색한 형태
  • 설치는 Homebrew의 brew install jesseduffield/horcrux/horcrux, scoopscoop bucket add extras; scoop install horcrux, 또는 binary release로 가능
  • 대안으로 제시된 ssss는 키에는 동작하지만 파일 자체에는 동작하지 않는 것으로 적혀 있으며, 다른 horcruxHaystack은 horcrux 임계값을 지원하지 않는 차이점 있음

댓글과 토론

Hacker News 의견들
  • 주의할 점은 이 도구가 파일 암복호화에 AES OFB 모드를 쓰며, 암호문 무결성 보장, 즉 MAC이 없다는 것임
    [0]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation...

    • 저 위키 설명은 나름 기술 배경이 있어도 이해하기 어려웠음. 5살에게 설명하듯 풀어줄 수 있나?
  • 종이 기반 백업 도구 중에 Shamir 비밀 공유를 써서 종이 사본 여러 장을 친구들에게 나눠주고, 나중에 광학적으로 읽어 파일을 복원할 수 있게 해주는 멋진 프로젝트가 있음
    https://github.com/cyphar/paperback

    • 쓸 만한 사용자 인터페이스를 만들 시간을 꼭 내야 하는데, 그래픽 쪽은 원래 강점이 아니었음
      지금은 기능은 다 동작하지만 QR 코드 내용을 명령줄에 복사해 붙여넣어야 하고, 디스크상, 아니 종이상 형식도 고정해야 함
    • 이게 다른 건지, 아니면 정확히 같은 일을 하는 건지 궁금함
      https://github.com/paritytech/banana_split
    • 아주 깔끔함. 아직 의존하기엔 조금 이른 느낌이지만, 더 성숙하고 쓰기 쉬워지면 많은 사람에게 꽤 유용할 수 있어 보임
    • Shamir 비밀 공유가 큰 입력에도 잘 동작하나? 아니면 평문은 AEAD로 암호화하고 키만 Shamir 비밀 공유로 나눠야 하나?
  • 최근 Levchin이 Shamir 비밀 공유와 그게 PayPal에서 일으킨 혼란에 대해 쓴 글이 있었음: https://max.levch.in/post/724289457144070144/shamir-secret-s...
    이건 내가 가장 좋아하는 알고리즘 중 하나지만, 솔직히 요즘은 내가 학문적으로만 매력을 느끼는 건지, 실제 사용 사례는 생각보다 더 제한적인 건지 의문이 들기 시작했음

    • Shamir 비밀 공유는 기본적으로 너드스나이핑에 완벽함
      암호학 배경이나 고급 수학이 거의 없어도 이해할 수 있을 만큼 단순하고, 사실상 대수 조금만 알면 됨. 가능한 것 자체가 놀랍고, 적어도 처음엔 구체적인 사용 사례도 뚜렷하게 보이며, 직접 구현해볼 수도 있음. 물론 여전히 함정은 있음
      그래서 토론 게시판뿐 아니라 산업 솔루션에서도 지나치게 자주 등장한다고 봄
    • 링크된 글이 그런 의문을 불러일으켜야 할 이유는 없어 보임
      둘 사이에 인과관계를 두는 건지는 모르겠지만, 문제는 알고리즘 자체가 아니라 알고리즘에 접근하는 인터페이스였음
    • 바로 그 우려를 바탕으로 지금 책 한 권을 쓰고 있음: pmfpbook.org
  • FAQ에 따르면 이 도구는 Shamir 비밀 공유 방식으로 암호화 키를 쪼갬. 하지만 사실 Reed-Solomon 방식을 쓰면 암호화 키 없이도 같은 목표를 달성할 수 있음
    먼저 입력 데이터를 올 오어 낫싱 변환(AONT)으로 처리한 다음 Reed-Solomon 조각으로 나누면 됨. Reed-Solomon은 구별 공격에 취약하고 입력 정보가 샐 가능성이 높기 때문에 AONT가 필요함
    [1] <https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_cor...>
    [2] <https://en.wikipedia.org/wiki/All-or-nothing_transform>
    [3] <https://en.wikipedia.org/wiki/Distinguishing_attack>

  • “암호로 암호화된 파일을, 일부 조각이 없어도 다시 조립할 수 있게 나누는” 방법은 여러 가지 떠올릴 수 있지만, 암호 없이 그렇게 할 수 있다는 점이 흥미를 끌었음
    보안 주제나 알고리즘을 좋아하는 입장에선 꽤 흥미로운 물건임. 어떻게 구현했는지 알고 싶어서 소스 코드를 파고 관련 기법을 읽어볼 것 같음. 다만 이런 게 어디에 유용한지는 잘 모르겠음. 민감한 데이터를 보호하는 “양파 껍질”의 한 층으로 의미 있는 위협 모델이 있는지, 아니면 이미 다른 방식으로 더 잘 해결되는 사용 사례보다 우월한 지점이 있는지 고민됨
    작성자도 오래된 일기장 비밀번호와 충분한 숨김 장소를 기억하는 문제를 농담처럼 비교하는데, 개인적으론 후자가 훨씬 큰 문제일 것 같음. 조각 수를 줄이고 숨길 곳은 늘려야 할 텐데, 그러면 제공되는 보안성이 깎임[0]
    다중서명이 떠오르긴 하지만, 내가 접한 건 “업데이트 하나를 배포하려고 USB 키를 꽂고 동료 두 명과 함께 프로그램을 실행해야 했던” 정도였음. 모두 키를 제공해야 했고 “내가 병가면 업데이트는 못 나감” 상태였는데, 그게 도구의 한계였는지 당시 알파라서 그렇게 설정한 건지는 모르겠음
    그래도 매우 흥미로움
    [0] 다만 “매트리스 밑”은 비밀번호를 “password”로 설정하는 것과 비슷한 수준의 보안일 듯함

    • 비상시에 사람들이 쓸 수 있도록 정보를 공유하는 용도는 어떨까? 데이터는 여러 위치에 저장하되, 그중 3곳에 접근할 수 있는 사람만 읽을 수 있게 하는 방식임
      실제 안전장치는 기존의 물리적 접근 통제임. 도둑이 데이터를 얻으려면 세 장소에 침입해야 함
      데이터를 암호화한 뒤 비밀번호를 세 조각으로 나누어 다른 위치에 저장할 수도 있지만, 그러면 데이터와 비밀번호를 둘 다 보관해야 함
  • 이름상 관련 있어 보이는 것들임. 아마 프로젝트가 하나 이상 있는 듯함. 또 뭐가 있을까?
    Horcrux: Split your file into encrypted fragments - https://news.ycombinator.com/item?id=29395575 - 2021년 11월, 댓글 11개
    Show HN: Horcrux, a Playground for Shamir Secret Sharing - https://news.ycombinator.com/item?id=26256726 - 2021년 2월, 댓글 40개
    Horcrux Encrypted Messaging - https://news.ycombinator.com/item?id=24322069 - 2020년 8월, 댓글 93개
    I made an app that lets you split a file into horcruxes - https://news.ycombinator.com/item?id=24026445 - 2020년 8월, 댓글 80개
    You can now make horcruxes out of your confidential files - https://news.ycombinator.com/item?id=21933983 - 2020년 1월, 댓글 17개

  • Usenet의 패리티 파일이 떠오름. 큰 아카이브를 작은 파일 여러 개와 일정 수의 패리티 파일로 나눠 올리고, 예를 들어 n개 중 n-3개만 있어도 원본 아카이브를 재생성할 수 있었음
    https://en.wikipedia.org/wiki/Parchive

  • 최근에 Clevis도 Shamir 비밀 공유를 지원한다는 걸 알았음. 사실 같은 타입과 권한의 핀이라도 여러 개를 설정하는 유일한 방법임, 말하자면 SSS의 RAID0 같은 것임
    https://github.com/latchset/clevis#pin-shamir-secret-sharing

  • 이거 깔끔하다고 생각해서 저장소에 들어가 봤더니, 만든 사람이 lazygit/lazydocker 만든 사람이었음. 다작하는 모습이 보기 좋음

  • FAQ에서 “이건 Harry Potter 세계관의 호크룩스와는 다르지 않나?”라는 질문에 “꽤 비슷하다. 호크룩스 하나만으로 원본 파일을 부활시킬 수 있으면 안 되지만, 두 개로는 가능하게 할 수 있으니 하나 차이일 뿐. 체크메이트, Harry Potter 팬들”이라고 답한 게 있음
    그런데 호크룩스의 핵심은 여러 장소에 백업을 두는 것임. 백업들을 여러 장소에 백업하는 이 도구가 이름을 훨씬 잘 쓴 사례임: https://github.com/chrispoole643/horcrux. 체크메이트, jesseduffield ;)

    • 맞지만, 또 아님. 기술적으로 호크룩스는 백업이었지만, 그 개념의 정서적 무게는 위험에 대비하려고 영혼을 쪼개고 자신의 본질을 덜어낸다는 데 있었음
      부분 백업이 그 아이디어의 정신에는 더 잘 맞음
      덧붙이면, 나는 그 개념을 난잡함에 대한 공격으로 읽었음. “Whore crux”처럼. 반대로 Lord of the Rings는 결혼에 대한 공격으로 볼 수 있는데, 반지를 끼면 보이지 않게 되고 “너무 많은 빵에 긁어 바른 버터”처럼 서서히 아무것도 아닌 존재로 사라지기 때문임