4 pontos por GN⁺ 2024-08-18 | 1 comentários | Compartilhar no WhatsApp
  • Magic Wormhole fornece uma biblioteca e a ferramenta de linha de comando wormhole para mover com segurança arquivos de qualquer tamanho, diretórios e textos curtos de um computador para outro
  • As duas pontas da transferência são identificadas pelo mesmo wormhole code, e normalmente o dispositivo de envio gera e exibe o código para ser digitado no dispositivo receptor
  • O código usa uma lista de palavras curtas e fáceis de pronunciar, e o lado receptor oferece autocompletar com Tab, então geralmente basta digitar apenas algumas letras
  • O wormhole code é de uso único, não precisa ser memorizado, e o programa usa dois servidores de repositórios separados: mailbox server e transit relay
  • Magic Wormhole é distribuído sob a licença MIT, é compatível com Python 3.10 ou superior e foi testado até a versão 3.12

Recursos oferecidos pelo Magic Wormhole

  • Magic Wormhole é um projeto com o objetivo de “levar com segurança de um computador para outro”
  • O pacote oferece duas formas
    • Biblioteca

      • a ferramenta de linha de comando wormhole
      • os alvos de transferência incluem o seguinte
      • arquivos de qualquer tamanho
      • diretórios
      • pequenos trechos de texto

Método de transferência baseado em wormhole code

  • Os dois endpoints são identificados usando o mesmo wormhole code
  • O fluxo típico é o seguinte
    • o dispositivo de envio gera o código e o exibe na tela
    • no dispositivo receptor, esse código é digitado
  • O código é curto, fácil de pronunciar e usa uma lista de palavras foneticamente distintas
  • O lado receptor oferece autocompletar com Tab para as palavras do código, então normalmente basta digitar apenas algumas letras
  • O wormhole code é de uso único e não precisa ser memorizado

Estrutura dos servidores

Documentação e materiais de apresentação

Licença, compatibilidade e instalação

  • Magic Wormhole é distribuído sob a licença MIT, e mais detalhes estão no arquivo LICENSE
  • A biblioteca é compatível com Python 3.10 ou superior e foi testada até a versão 3.12
  • O pacote Magic Wormhole está incluído em vários sistemas operacionais
  • Para instalar sem pacote do sistema operacional, basta seguir a documentação de instalação

1 comentários

 
GN⁺ 2024-08-18
Opiniões no Hacker News
  • Uso há anos para transferir arquivos grandes entre sistemas em ambientes de rede estranhos, e quase sempre funciona sem problemas
    Em um teste um pouco mais incomum, subi meu próprio relay do Magic Wormhole e consegui ajustá-lo para tornar a cópia de arquivos muito grandes mais rápida e estável
    Ainda não gosto do Google Drive, porque ele quebra com frequência demais quando jogo arquivos de dezenas de GB nele
    https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...

    • É bem crítico que ferramentas como essa não estejam evoluindo. Há uns 6 anos havia bastante atividade em torno de PAKE, mas ainda faltam hole punching confiável para usar sem servidores relay lentos e múltiplos fluxos TCP simultâneos, ou um protocolo UDP cuidadosamente projetado, para enviar grandes volumes de dados rapidamente em caminhos longos e de alta largura de banda
      Na última vez que tentei enviar um grande volume de dados com o Wormhole, fiquei limitado a 20 MB/s por causa do produto largura de banda-latência e acabei saturando um link de 1 Gbps usando HTTP comum com aria2c e múltiplos fluxos
      Não vejo motivo para ferramentas baseadas em PAKE não substituírem completamente, em transferências grandes de longa distância, ferramentas proprietárias excessivamente complexas como o Globus, mas a realidade ficou presa no passado
    • Eu esperava que o servidor relay fosse usado apenas no handshake inicial para atravessar NAT, e que depois a transferência fosse P2P
      Só quando houvesse algumas restrições de rede é que os dados reais passariam pelo relay; se não for assim, fico curioso para saber como bancam o custo de operar um relay gratuito
    • Uso uma combinação de scp, LocalSend, magic wormhole e sharedrop.io, e às vezes também uso python -m http.server para downloads locais quando estou com pressa
      É uma pena que esta tirinha do xkcd continue tão válida hoje quanto em 2011: https://xkcd.com/949/
  • Esta é uma daquelas ferramentas utilitárias de função única que fazem uma coisa extremamente bem, mas funcionam tão bem e de forma tão discreta que passam completamente despercebidas
    Sinto que deveríamos ser mais gratos por criações excelentes como essa

  • Uso o croc, um projeto parecido com bons recursos: https://github.com/schollz/croc

  • Já transferi uma vez um arquivo de 70 GB com o wormhole. Antes isso seria algo impossível
    Eu sabia que estava usando a largura de banda do servidor relay, então doei para o Debian logo em seguida. Eu entendia que o Debian operava o relay da versão do pacote apt

    • Sou o autor do Magic Wormhole. Eu opero o servidor relay, mas o mantenedor do Debian concordou em colocar um hostname alternativo na versão empacotada
      É um CNAME que aponta para o mesmo lugar usado pelo código git upstream, com o objetivo de facilitar a troca caso isso gerasse custos
      Até agora não foi um problema; transferimos cerca de 10 a 15 TB por mês, mas ele compartilha um pool de largura de banda com outros servidores que eu já alugo de qualquer forma, então só paguei excedente uma vez
      Mesmo que alguém me fizesse uma doação, sinceramente acho que eu simplesmente a repassaria ao Debian
      De vez em quando, quando alguém deixa passar meio terabyte, penso que deveria mover para um provedor mais lento, mas com tarifa fixa, ou implementar um código melhor de limitação de velocidade, ou finalmente implementar uma extensão de protocolo em que o cliente informe antecipadamente quanto pretende transferir e o servidor possa recusar
      Mas isso ainda nunca chegou a ter prioridade alta o suficiente
    • Só aqui embaixo é que começo a ver um pouco do ponto principal. Fico curioso se isso depende de um único servidor ou de um pequeno número de servidores relay mantidos por doações
      É claro que a travessia de NAT para NAT é a principal motivação. Se não houver barreiras dos dois lados, basta usar scp, rsync ou sftp
      Também fico curioso se é possível configurar o servidor relay. Parecia estar meio hardcoded
    • O protocolo de transferência do wormhole tenta fazer uma conexão direta para evitar transferir dados pelo relay
  • Encontrei isto por acaso também. “Uma implementação em Rust do Magic Wormhole com novos recursos e melhorias”: https://github.com/magic-wormhole/magic-wormhole.rs

    • Faltam alguns recursos presentes em outras implementações. Por exemplo, não há recurso para enviar um zip e fazê-lo ser descompactado corretamente
  • Sou o autor. Posso responder perguntas, se houver

    • Uso bastante o wormhole, mas venho adiando verificar se ele é tão seguro quanto ssh/scp, então sempre criptografo com gpg o arquivo que vou transferir antes de colocá-lo no wormhole
      Isso é paranoia minha?
    • Eu só precisava dele para inicializar uma VM em uma máquina nova, mas acabei continuando a usá-lo para várias finalidades. É um projeto excelente
    • Tenho algumas perguntas. Quero saber se há um app e se é possível compartilhar a senha por QR code quando os dados são grandes demais para caber em um QR code
      Também quero saber como vocês planejam lidar com computação quântica e se há planos de migrar para criptografia pós-quântica para se proteger contra ataques de armazenar agora e descriptografar depois
      Também gostaria de saber se o protocolo pode ser estendido sobre proxies mais gerais, como servidores TURN
  • Há também algumas outras ferramentas
    p2pcopy https://github.com/psantosl/p2pcopy
    pcp https://github.com/dennis-tra/pcp
    wormhole-william https://github.com/psanford/wormhole-william

  • Pode ser uma pergunta boba, mas qual seria a melhor forma de fazer isso entre um iPhone e um MacBook?
    O AirDrop foi desativado por política, o armazenamento do iCloud está cheio por preguiça, e uso Syncthing em todos os outros dispositivos, mas não encontrei um cliente que eu possa usar no iPhone da empresa

    • Estou usando sharedrop.io; ele também é open source e funciona bem: https://github.com/szimek/sharedrop
      Gosto especialmente do fato de não precisar instalar apps de terceiros em nenhum dispositivo
      No Safari do Mac, normalmente parece não funcionar tão bem quanto no Chrome, mas já transferi de Windows para iOS, de Windows para macOS e de macOS para iOS sem instalar nada
    • Se estiverem na mesma rede, existe o LocalSend, uma alternativa ao AirDrop open source e multiplataforma: https://github.com/localsend/localsend
    • Existe o TailDrop, o recurso matador do Tailscale. Dá para transferir arquivos de forma confiável entre todo tipo de dispositivo
    • Basta conectar os dois dispositivos à mesma rede WiFi e usar um servidor HTTP, como python -m http.server
    • https://mobiussync.com/
  • Post relacionado: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - maio de 2021, 178 comentários

  • O Tailscale agora também tem Taildrop: https://tailscale.com/kb/1106/taildrop

    • O Taildrop também é bom, mas, se você se dá bem com ferramentas de linha de comando, o Wormhole é muito mais flexível e fácil de usar
      Mesmo usando Tailscale em geral por aqui, ainda envio arquivos com frequência pelo wormhole