Horcrux: 파일을 암호화된 조각으로 분할
(github.com/jesseduffield)- Horcrux는 파일을 암호화된 horcrux 조각으로 나누고, 비밀번호를 기억하지 않아도 원본 파일을 복원할 수 있게 하는 CLI 도구
- 큰 민감 파일을 암호화해야 하지만 몇 년 뒤 비밀번호를 기억하지 못할 수 있는 사용자, 여러 채널로 파일을 전송해 공격자의 가로채기 가능성을 크게 낮추려는 사용자를 위한 용도
split은 파일을 나눌 때 생성할 조각 수와 원본 복원에 필요한 조각 수를 입력받는 방식이며, 예시는 5개 조각 중 임의의 3개로 복원 가능한 구성bind는 horcrux 조각이 있는 디렉터리에서 원본 파일을 다시 묶는 명령이며, 디렉터리를 인자로 전달하는 방식도 가능- 내부 방식은 Shamir Secret Sharing Scheme으로 암호화 키를 여러 부분으로 나누고, 정해진 임계값(threshold) 이상의 조각이 있을 때 원래 키를 재구성하는 구조
- 키 생성은 Go 표준 라이브러리의
crypto/randRead함수를 사용하며, Shamir 구현은 Hashicorp의 vault repo 구현을 각색한 형태 - 설치는 Homebrew의
brew install jesseduffield/horcrux/horcrux, scoop의scoop bucket add extras; scoop install horcrux, 또는 binary release로 가능 - 대안으로 제시된
ssss는 키에는 동작하지만 파일 자체에는 동작하지 않는 것으로 적혀 있으며, 다른horcrux와Haystack은 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
- Shamir 비밀 공유는 기본적으로 너드스나이핑에 완벽함
-
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>- 그 접근이 정보이론적으로 안전한가? Shamir 비밀 공유는 그렇고, 수학도 아주 단순함
엄밀히 말하면 Shamir에서도 암호화 단계가 필수는 아님. 다만 비밀 자체를 암호화하고 SSS는 키에만 쓰는 데 장점이 있음. Horcrux가 그렇게 동작하는지는 모르겠지만, 내 비슷한 도구인 Paperback은 그렇게 함
[1]: https://github.com/cyphar/paperback - 정확히 이 방식을 쓰는 것처럼 보이는 프로젝트를 찾았음: <https://github.com/atbarker/AONT-RS>
논문: <https://www.usenix.org/legacy/event/fast11/tech/full_papers/...>
- 그 접근이 정보이론적으로 안전한가? Shamir 비밀 공유는 그렇고, 수학도 아주 단순함
-
“암호로 암호화된 파일을, 일부 조각이 없어도 다시 조립할 수 있게 나누는” 방법은 여러 가지 떠올릴 수 있지만, 암호 없이 그렇게 할 수 있다는 점이 흥미를 끌었음
보안 주제나 알고리즘을 좋아하는 입장에선 꽤 흥미로운 물건임. 어떻게 구현했는지 알고 싶어서 소스 코드를 파고 관련 기법을 읽어볼 것 같음. 다만 이런 게 어디에 유용한지는 잘 모르겠음. 민감한 데이터를 보호하는 “양파 껍질”의 한 층으로 의미 있는 위협 모델이 있는지, 아니면 이미 다른 방식으로 더 잘 해결되는 사용 사례보다 우월한 지점이 있는지 고민됨
작성자도 오래된 일기장 비밀번호와 충분한 숨김 장소를 기억하는 문제를 농담처럼 비교하는데, 개인적으론 후자가 훨씬 큰 문제일 것 같음. 조각 수를 줄이고 숨길 곳은 늘려야 할 텐데, 그러면 제공되는 보안성이 깎임[0]
다중서명이 떠오르긴 하지만, 내가 접한 건 “업데이트 하나를 배포하려고 USB 키를 꽂고 동료 두 명과 함께 프로그램을 실행해야 했던” 정도였음. 모두 키를 제공해야 했고 “내가 병가면 업데이트는 못 나감” 상태였는데, 그게 도구의 한계였는지 당시 알파라서 그렇게 설정한 건지는 모르겠음
그래도 매우 흥미로움
[0] 다만 “매트리스 밑”은 비밀번호를 “password”로 설정하는 것과 비슷한 수준의 보안일 듯함- 비상시에 사람들이 쓸 수 있도록 정보를 공유하는 용도는 어떨까? 데이터는 여러 위치에 저장하되, 그중 3곳에 접근할 수 있는 사람만 읽을 수 있게 하는 방식임
실제 안전장치는 기존의 물리적 접근 통제임. 도둑이 데이터를 얻으려면 세 장소에 침입해야 함
데이터를 암호화한 뒤 비밀번호를 세 조각으로 나누어 다른 위치에 저장할 수도 있지만, 그러면 데이터와 비밀번호를 둘 다 보관해야 함
- 비상시에 사람들이 쓸 수 있도록 정보를 공유하는 용도는 어떨까? 데이터는 여러 위치에 저장하되, 그중 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는 결혼에 대한 공격으로 볼 수 있는데, 반지를 끼면 보이지 않게 되고 “너무 많은 빵에 긁어 바른 버터”처럼 서서히 아무것도 아닌 존재로 사라지기 때문임
- 맞지만, 또 아님. 기술적으로 호크룩스는 백업이었지만, 그 개념의 정서적 무게는 위험에 대비하려고 영혼을 쪼개고 자신의 본질을 덜어낸다는 데 있었음