Horcrux: dividir arquivos em fragmentos criptografados
(github.com/jesseduffield)- Horcrux é uma ferramenta CLI que divide arquivos em fragmentos horcrux criptografados e permite restaurar o arquivo original sem precisar lembrar uma senha
- Voltado para usuários que precisam criptografar arquivos grandes e sensíveis, mas podem não se lembrar da senha anos depois, ou que desejam enviar um arquivo por vários canais para reduzir bastante a chance de interceptação por um atacante
splitfunciona recebendo a quantidade de fragmentos a gerar ao dividir o arquivo e a quantidade de fragmentos necessária para restaurar o original; o exemplo mostra uma configuração em que qualquer 3 de 5 fragmentos permitem a restauraçãobindé o comando para recompor o arquivo original em um diretório que contém os fragmentos horcrux, e também é possível passar o diretório como argumento- O funcionamento interno usa o Shamir Secret Sharing Scheme para dividir a chave de criptografia em várias partes, com uma estrutura em que a chave original pode ser reconstruída quando há fragmentos suficientes para atingir o limiar (threshold) definido
- A geração de chaves usa a função
Readdecrypto/randda biblioteca padrão do Go, e a implementação de Shamir é uma adaptação da implementação do repositório vault repo da Hashicorp - A instalação pode ser feita com Homebrew via
brew install jesseduffield/horcrux/horcrux, com scoop viascoop bucket add extras; scoop install horcrux, ou por binary release - Como alternativa,
ssssé descrito como funcionando para chaves, mas não para arquivos em si, enquanto outros comohorcruxeHaystackdiferem por não oferecer suporte ao limiar de horcrux
1 comentários
Opiniões no Hacker News
Um ponto de atenção é que esta ferramenta usa o modo AES OFB para criptografar e descriptografar arquivos, e não oferece garantia de integridade do texto cifrado, ou seja, não há MAC
[0]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation...
Há um projeto interessante entre as ferramentas de backup em papel que usa compartilhamento de segredo de Shamir para permitir distribuir várias cópias em papel para amigos e, depois, lê-las opticamente para restaurar o arquivo
https://github.com/cyphar/paperback
No momento, todas as funcionalidades funcionam, mas é preciso copiar e colar o conteúdo dos QR codes na linha de comando, e também preciso fixar o formato em disco — ou melhor, em papel
https://github.com/paritytech/banana_split
Recentemente, Levchin escreveu sobre o compartilhamento de segredo de Shamir e a confusão que ele causou no PayPal: https://max.levch.in/post/724289457144070144/shamir-secret-s...
Esse é um dos meus algoritmos favoritos, mas, sinceramente, hoje em dia começo a me perguntar se eu só o acho academicamente fascinante, ou se seus casos de uso reais são mais limitados do que parecem
É simples o suficiente para ser entendido mesmo com quase nenhum conhecimento de criptografia ou matemática avançada; na prática, basta um pouco de álgebra. O simples fato de ser possível é surpreendente e, pelo menos no início, os casos de uso concretos também parecem bem claros, além de ser algo que dá para implementar por conta própria. Claro que ainda há armadilhas
Por isso acho que ele aparece com frequência excessiva não só em fóruns de discussão, mas também em soluções industriais
Não sei se você está estabelecendo uma relação causal entre as duas coisas, mas o problema foi a interface para acessar o algoritmo, não o algoritmo em si
Segundo o FAQ, esta ferramenta divide a chave de criptografia usando o esquema de compartilhamento de segredo de Shamir. Mas, na verdade, é possível alcançar o mesmo objetivo sem uma chave de criptografia usando Reed-Solomon
Primeiro, basta processar os dados de entrada com uma transformação tudo-ou-nada (AONT) e depois dividi-los em fragmentos Reed-Solomon. A AONT é necessária porque Reed-Solomon é vulnerável a ataques de distinção e há grande chance de vazar informações da entrada
[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>
A rigor, mesmo em Shamir a etapa de criptografia não é obrigatória. Mas há vantagens em criptografar o próprio segredo e usar SSS apenas para a chave. Não sei se o Horcrux funciona assim, mas minha ferramenta semelhante, Paperback, funciona
[1]: https://github.com/cyphar/paperback
Artigo: <https://www.usenix.org/legacy/event/fast11/tech/full_papers/...>
Dá para imaginar várias formas de “dividir um arquivo criptografado por senha de modo que ele possa ser remontado mesmo faltando algumas partes”, mas o que chamou minha atenção foi o fato de conseguir fazer isso sem senha
Para quem gosta de temas de segurança ou algoritmos, é algo bem interessante. Acho que eu acabaria mergulhando no código-fonte e lendo sobre as técnicas relacionadas para entender como foi implementado. Por outro lado, não sei muito bem para que isso seria útil. Fico pensando se existe um modelo de ameaça significativo em que isso seja uma camada da “casca de cebola” para proteger dados sensíveis, ou se há algum ponto em que isso seja superior a casos de uso que já são melhor resolvidos de outras formas
O autor também compara, em tom de brincadeira, o problema de lembrar a senha de um diário antigo com o de lembrar lugares suficientes para esconder as partes, mas, pessoalmente, acho que o segundo seria um problema muito maior. Seria preciso reduzir o número de partes e aumentar os lugares para escondê-las, mas aí a segurança oferecida diminui[0]
Multisig até me vem à cabeça, mas o que encontrei foi algo do tipo “para distribuir uma atualização, eu precisava inserir uma chave USB e executar um programa junto com dois colegas”. Todos precisavam fornecer as chaves, e a situação era “se eu estiver de licença médica, a atualização não sai”; não sei se isso era uma limitação da ferramenta ou se foi configurado assim por estar em alfa na época
Ainda assim, é muito interessante
[0] Dito isso, “debaixo do colchão” parece ter um nível de segurança parecido com definir a senha como “password”
A proteção real seria o controle de acesso físico já existente. Para obter os dados, um ladrão teria que invadir três lugares
Também daria para criptografar os dados e dividir a senha em três partes, armazenando-as em locais diferentes, mas aí seria preciso guardar tanto os dados quanto a senha
Pelo nome, parecem relacionados. Provavelmente há mais de um projeto. O que mais existe?
Horcrux: Split your file into encrypted fragments - https://news.ycombinator.com/item?id=29395575 - novembro de 2021, 11 comentários
Show HN: Horcrux, a Playground for Shamir Secret Sharing - https://news.ycombinator.com/item?id=26256726 - fevereiro de 2021, 40 comentários
Horcrux Encrypted Messaging - https://news.ycombinator.com/item?id=24322069 - agosto de 2020, 93 comentários
I made an app that lets you split a file into horcruxes - https://news.ycombinator.com/item?id=24026445 - agosto de 2020, 80 comentários
You can now make horcruxes out of your confidential files - https://news.ycombinator.com/item?id=21933983 - janeiro de 2020, 17 comentários
Isso me lembra os arquivos de paridade da Usenet. Um arquivo grande era dividido e enviado como vários arquivos pequenos mais certo número de arquivos de paridade; por exemplo, mesmo tendo apenas n-3 de n arquivos, era possível recriar o arquivo original
https://en.wikipedia.org/wiki/Parchive
Recentemente descobri que o Clevis também oferece suporte a compartilhamento de segredo de Shamir. Na verdade, é a única forma de configurar múltiplos pins do mesmo tipo e com as mesmas permissões; por assim dizer, é como um RAID0 de SSS
https://github.com/latchset/clevis#pin-shamir-secret-sharing
Achei isso elegante e fui olhar o repositório; descobri que o criador é a mesma pessoa que fez lazygit/lazydocker. É legal ver alguém tão produtivo
No FAQ, há uma resposta à pergunta “isso não é diferente das horcruxes do universo de Harry Potter?” dizendo: “É bem parecido. Uma horcrux sozinha não deveria conseguir ressuscitar o arquivo original, mas dá para fazer com que duas consigam, então é só uma diferença de um. Xeque-mate, fãs de Harry Potter”
Mas o ponto central das horcruxes é ter backups em vários lugares. Esta ferramenta, que faz backup dos backups em vários lugares, é um uso muito melhor do nome: https://github.com/chrispoole643/horcrux. Xeque-mate, jesseduffield ;)
Um backup parcial combina melhor com o espírito dessa ideia
Além disso, eu li esse conceito como um ataque à promiscuidade. Como “Whore crux”. Em contrapartida, O Senhor dos Anéis pode ser visto como um ataque ao casamento, porque, ao colocar o anel, você fica invisível e vai desaparecendo aos poucos até virar nada, como “manteiga raspada sobre pão demais”