5 pontos por GN⁺ 2023-09-17 | 1 comentários | Compartilhar no WhatsApp
  • 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
  • split funciona 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ção
  • bind é 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 Read de crypto/rand da 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 via scoop 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 como horcrux e Haystack diferem por não oferecer suporte ao limiar de horcrux

1 comentários

 
GN⁺ 2023-09-17
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...

    • Achei essa explicação da wiki difícil de entender, mesmo tendo algum contexto técnico. Dá para explicar como se eu tivesse 5 anos?
  • 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

    • Eu realmente preciso arrumar tempo para criar uma interface de usuário utilizável, mas a parte gráfica nunca foi meu forte
      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
    • Fiquei curioso se isto é diferente, ou se faz exatamente a mesma coisa
      https://github.com/paritytech/banana_split
    • Muito bem feito. Ainda parece um pouco cedo para depender dele, mas, se amadurecer e ficar mais fácil de usar, parece que pode ser bem útil para muita gente
    • O compartilhamento de segredo de Shamir funciona bem com entradas grandes? Ou o texto em claro deveria ser criptografado com AEAD e apenas a chave dividida com compartilhamento de segredo de Shamir?
  • 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

    • O compartilhamento de segredo de Shamir é basicamente perfeito para nerdsniping
      É 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 vejo por que o texto linkado deveria levantar essa dúvida
      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
    • Estou escrevendo um livro justamente com base nessa preocupação: pmfpbook.org
  • 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>

  • 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”

    • Que tal usar isso para compartilhar informações que as pessoas possam acessar em uma emergência? Os dados ficariam armazenados em vários locais, mas só poderiam ser lidos por alguém com acesso a 3 deles
      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 ;)

    • Sim, mas também não. Tecnicamente, uma horcrux era um backup, mas o peso emocional do conceito estava em dividir a própria alma e remover parte da própria essência para se precaver contra riscos
      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”