Magic Wormhole: コンピューター間で安全にファイルを転送する技術
(github.com/magic-wormhole)- Magic Wormholeは、あるコンピューターから別のコンピューターへ、任意サイズのファイル、ディレクトリ、短いテキストを安全に移動するためのライブラリと
wormholeコマンドラインツールを提供する - 転送の両端は同じ wormhole code で識別され、通常は送信側デバイスがコードを生成して表示し、受信側デバイスで入力する
- コードには短くて人が発音しやすい単語リストが使われ、受信側ではコード語の タブ補完 が利用できるため、通常は数文字だけ入力すればよい
- wormhole code は 使い捨て で、覚えておく必要はなく、プログラムは別リポジトリにある mailbox server と transit relay の2つのサーバーを使用する
- Magic Wormhole は MIT ライセンス で配布され、Python 3.10 以上に対応し、3.12 までテストされている
Magic Wormhole が提供する機能
- Magic Wormhole は「あるコンピューターから別のコンピューターへ安全に持っていく」ことを目標にしたプロジェクトである
- パッケージは2つの形態を提供する
-
ライブラリ
wormholeという コマンドラインツール- 転送対象には以下が含まれる
- 任意サイズのファイル
- ディレクトリ
- 短いテキスト断片
-
wormhole code ベースの転送方式
- 2つのエンドポイントは同じ wormhole code を使って識別される
- 一般的な流れは次のとおり
- 送信側デバイスがコードを生成して画面に表示する
- 受信側デバイスでそのコードを入力する
- コードは短く、人が発音しやすく、音声的に区別しやすい単語リストを使用する
- 受信側ではコード語に対する タブ補完 が提供されるため、通常は数文字だけ入力すればよい
- wormhole code は 使い捨て で、覚えておく必要はない
サーバー構成
- このプログラムは2つのサーバーを使用し、各サーバーのソースコードは別リポジトリにある
ドキュメントと発表資料
- 全体のドキュメントは Magic Wormhole ドキュメント またはリポジトリの
docs/サブディレクトリで確認できる - PyCon 2016 の発表資料が提供されている
ライセンス、互換性、インストール
- Magic Wormhole は MIT ライセンス で配布され、詳細は
LICENSEファイルにある - ライブラリは Python 3.10 以上 に対応し、3.12 までテストされている
- Magic Wormhole パッケージは複数のオペレーティングシステムに含まれている
- OS パッケージなしでインストールするには、Installation docs に従えばよい
1件のコメント
Hacker Newsでの意見
奇妙なネットワーク環境でシステム間の大容量ファイルを移すときに何年も使っているが、ほとんど常に問題なく動く
もう少し変わったテストとして、自前でMagic Wormholeリレーを立てて、非常に大きなファイルコピーをより速く安定させるよう調整できた
Google Driveは数十GBのファイルを投げるとあまりに頻繁に崩れるので、今でも嫌い
https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...
最後にWormholeで大量データを送ろうとしたときは、帯域遅延積のせいで20MB/sに制限され、結局は普通のHTTPにaria2cとマルチストリームを使って1Gbps回線を使い切った
PAKEベースのツールが長距離の大容量転送で、Globusのような過度に複雑なプロプライエタリツールを完全に置き換えられない理由はないと思うが、現実は過去にとどまっている
一部のネットワーク制限がある場合だけ実データがリレーを通るはずだが、そうでないなら無料リレーの運用コストをどう賄っているのか気になる
python -m http.serverもたまに使うこのxkcdの漫画が2011年と同じように今でも有効なのが残念: https://xkcd.com/949/
これは一つの機能をものすごくうまくこなす単機能ユーティリティの一つで、あまりにうまく動きながらも目立たないので、完全に見過ごされがち
こういう素晴らしい創作物にもっと感謝すべきだと感じる
似たプロジェクトで、良い機能を持つcrocを使っている: https://github.com/schollz/croc
https://redrocket.club/posts/croc/
wormholeで70GBのファイルを一度移してみた。昔なら到底できなかったこと
リレーサーバーの帯域を使ったのは分かっていたので、すぐにDebianへ寄付した。aptパッケージ版のリレーをDebianが運用していると理解していた
アップストリームのgitコードが使うアドレスと同じ場所を指すCNAMEで、費用負担が発生したら簡単に切り替えられるようにするのが目的でした
今のところ問題にはなっておらず、月に10〜15TBほど転送していますが、いずれにせよ借りている他のサーバーと帯域プールを共有しているので、超過料金を払ったのは一度だけです
誰かが私に寄付してくれても、正直そのままDebianに送ると思います
ときどき誰かが半テラバイトを流すと、もっと遅いが定額制のプロバイダーへ移すか、より良い速度制限コードを実装するか、クライアントが転送するデータ量を事前に明示しサーバーが拒否できるプロトコル拡張をいよいよ実装すべきだと考えます
ただ、まだ優先度が十分に高くなったことはありません
NAT対NATの通過が最大の動機なのは明らか。両側に壁がなければ、単にscp、rsync、sftpを使えばいいのだから
リレーサーバーを設定できるのかも気になる。ある程度ハードコードされているように見えた
偶然これも見つけた。「新機能と改善を取り入れたMagic WormholeのRust実装」: https://github.com/magic-wormhole/magic-wormhole.rs
作者です。質問があれば答えられます
これは偏執的な行動だろうか?
量子コンピューティングにはどう対応する予定なのか、保存して後で復号する攻撃に備えて耐量子暗号へ移行する計画があるのかも気になる
プロトコルをTURNサーバーのような、より一般的なプロキシ上へ拡張できるのかも知りたい
ほかにもいくつかツールがある
p2pcopy https://github.com/psantosl/p2pcopy
pcp https://github.com/dennis-tra/pcp
wormhole-william https://github.com/psanford/wormhole-william
https://github.com/mat-sz/filedrop
https://github.com/saljam/webwormhole
https://github.com/schollz/croc
https://github.com/dutchcoders/transfer.sh
https://github.com/timvisee/send
https://github.com/schlagmichdoch/pairdrop
https://github.com/SnapDrop/snapdrop
ばかな質問かもしれないけど、iPhoneとMacBookの間ではこれをどうやるのがいいだろう?
AirDropはポリシー上無効化されていて、iCloudストレージは怠っていたせいでいっぱい、ほかのすべてのデバイスではSyncthingを使っているが、会社のiPhoneで使えるクライアントが見つからなかった
特に、どのデバイスにもサードパーティーアプリをインストールする必要がないところが気に入っている
MacのSafariではたいていChromeほどはうまく動かないようだが、WindowsからiOS、WindowsからmacOS、macOSからiOSへ、インストールなしで転送したことがある
python -m http.serverのようなHTTPサーバーを使えばいい関連記事: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - 2021年5月、コメント178件
Tailscaleにも今ではTaildropがある: https://tailscale.com/kb/1106/taildrop
こちらではTailscaleを全般的に使っているにもかかわらず、今でもファイルはwormholeで送ることが多い