マグネットリンク

パイレート・ベイで使用されるマグネットアイコン

マグネットリンクは、マグネットURIスキームにより定義される形式であり、場所ではなく暗号学的ハッシュ関数を通じてその内容によってファイル(URN)を識別するためのデファクトスタンダードである。

マグネットリンクはさまざまな文脈で使用可能であるが、特にP2Pファイル共有ネットワークにおいて有用である。マグネットリンクは、継続的に利用可能なホストを必要とせずにリソースを参照でき、かつファイルを既に持っている誰もが中央機関を介さずにリンクを生成できるためである。この特性により、ファイル共有コミュニティにおいて「保証された」検索語句としての使用が広まり、誰でもマグネットリンクを配布することで、そのリンクから取得されるリソースが意図したものであることを保証できるようになっている。

歴史

[編集]

マグネットURIの標準は2002年にBitzi英語版によって開発された。これは、eDonkey2000英語版およびFreenet(現Hyphanet)で使用されていたed2k:およびfreenet: URIスキームの「ベンダーおよびプロジェクトに依存しない一般化」としての側面もあり、公式なIETFURI標準にできる限り準拠しようとする試みであった。BitTorrentは、2020年にBitTorrent v2の変更の一環としてbtmh:プロトコルを導入した[1]

フォーマットパラメータ

[編集]

マグネットURIは、1つ以上のパラメータから成る。順序に意味はなく、通常のHTTPURLの末尾に付加されるクエリ文字列と同様の形式である。

以下のパラメータがサポートされている[2][3]

パラメータ 名称 説明
xt Exact Topic ファイルのハッシュ値を含むURN。これはマグネットリンクにおいて最も重要な部分であり、指定されたファイルを検索・検証するために使用される。URNはプロトコルに依存するため、btih(BitTorrent)におけるファイルハッシュURNはed2k用のURNとはまったく異なる。
xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a
dn Display Name ユーザーに表示されるファイル名。利便性のために使用される。
xl eXact Length ファイルサイズ(バイト単位)
tr address TRacker BitTorrentのダウンロードにおいてDHTを用いずにリソースを取得するために使用されるトラッカーのURL[3]。値はURLエンコードされなければならない。
tr=http%3A%2F%2Fexample.org%2Fannounce
ws Web Seed HTTP(S)経由で提供されるペイロードデータ
as[要出典] Acceptable Source ウェブサーバからの直接ダウンロードを指す。クライアントがP2Pネットワーク上でファイルを見つけられない・ダウンロードできない場合の代替手段と見なされている。
as=[ファイルへのリンク]
xs[要出典] eXact Source マグネットリンクが指すファイルのHTTP(またはHTTPS、FTP、FTPSなど)ダウンロード元、P2Pソースのアドレス、またはDC++の場合はハブのアドレスを指す。クライアントはこれらに直接接続し、ファイルやそのソースを要求する。このフィールドはP2Pクライアントによってソース情報を保持するためによく使用され、ファイルハッシュを含む場合もある。
xs=http://[クライアントのアドレス]:[クライアントのポート]/uri-res/N2R?[ハッシュを含むURN ]
xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
kt[要出典] Keyword Topic 特定のファイルではなく、P2Pネットワークで検索するためのキーワード文字列を指定する。
kt=martin+luther+king+mp3
mt[要出典] Manifest Topic マグネットリンクのリストを含むメタファイルへのリンク(MAGMA – MAGnet MAnifest)、つまりリンクのリストへのリンク。
mt=http://example.org/all-my-favorites.rss
mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ
so[4][5] Select Only Torrentクライアントがダウンロードすべき特定のファイルを列挙する[6]。個別のファイルインデックスまたはインデックス範囲(両端含む)で指定される。
so=0,2,4,6-8
x.pe PEer 接続先の固定ピアアドレスを指定する。トラッカーやDHTが存在しない場合のピア検出の初期手段として使用される[3]
x.pe=hostname:port
x.pe=ipv4-literal:port
x.pe=[ipv6-literal]:port

この標準は、"x"で始まるアプリケーション固有の実験的パラメータも許容している[要出典]

Exact Topic (xt)

[編集]

xtパラメータは、特定のP2Pプロトコルに対するURNを指定する。これはTorrentのメタデータを検索するためのパラメータとして機能し、.torrentファイル自体に含まれるメタデータの代替手段として、URNを用いてP2Pネットワーク上でそのメタデータを検索する。各プロトコルはURNを独自に処理する。たとえば、xt=urn:btih:FFC7E738EAA4CD4ECF51EC6FD669C6CDE2C281A8はbtih(BitTorrent v1プロトコル)を使用しており、BitTorrentクライアントはこのハッシュを取得してBitTorrent DHT内でトレントのメタデータを検索できる[7]。DHTの場合、クライアントはあらかじめ既知のノード群を検索し、infohashに対するメタデータを要求する。これらのノードは他の既知ノードに対して同様の要求を行い、最終的にスウォームが発見されて返される。

xtはグループ設定も可能である。複数のファイルを含めることは、各リンクパラメータにピリオド(".")で始まる連番を付加することで実現される[要出典]

magnet:?xt.1=[最初のファイルのURN]&xt.2=[二番目のファイルのURN]
Tiger Treeハッシュ(TTH)
これらのハッシュはDirect ConnectおよびGnutella2などで使用される。
xt=urn:tree:tiger:[TTHハッシュ(Base32) ]
SHA-1
これらのハッシュ値はGnutellaおよびGnutella2で使用される。
xt=urn:sha1:[SHA-1ハッシュ(Base32) ]
BitPrint
これらのハッシュはSHA-1ハッシュの後にTTHハッシュが続き、ピリオドで区切られる。GnutellaおよびGnutella2で使用される。
xt=urn:bitprint:[SHA-1ハッシュ(Base32) ].[TTHハッシュ(Base32) ]
eDonkey2000英語版ハッシュ
これらのハッシュ値はeDonkey2000(ED2K)で使用される。
xt=urn:ed2k:[ED2Kハッシュ(16進) ]
Advanced Intelligent Corruption Handler(AICH)
これはマグネットリンクの正式なURNではないが、このようなハッシュはeDonkey2000英語版でダウンロード中またはダウンロード済みのファイルの整合性を回復および制御するために使用される。
xt=urn:aich:[AICHハッシュ(Base32) ]
Kazaaハッシュ
FastTrack英語版で使用されるが、これらのハッシュは衝突攻撃に対して脆弱である。
xt=urn:kzhash:[Kazaaハッシュ(16進) ]
BitTorrent情報ハッシュ(BTIH)
これはBitTorrentメタファイルの「info」セクションのSHA-1ハッシュ値を16進でエンコードしたものであり、BitTorrentがダウンロード可能なファイルまたはファイル群を識別するために使用する。既存リンクとの後方互換性のため、クライアントはこのハッシュのBase32エンコード版もサポートすべきである[3]
xt=urn:btih:[BitTorrent info ハッシュ(16進) ]
一部のクライアント(例:Vuze)ではinfo_hashのBase32を要求する。
ビットトレント情報ハッシュv2(BTMH)
BitTorrentv2では旧式のSHA-1ハッシュをSHA-256ハッシュに置き換えている。v2ハッシュは新しい接頭辞(btmh)を与えられ、v1およびv2両方のスウォームに参加可能なトレントを許容する[1]
xt=urn:btmh:[1220: (v2接頭辞) BitTorrent Infoハッシュ (16進) ]
MD5
Gnutella2でサポートされるが、これらのハッシュは衝突攻撃に対して脆弱である。
xt=urn:md5:[ MD5ハッシュ (16進) ]

ファイルへのウェブリンク

[編集]

Magnetリンクには、直接的またはバックアップ用のソースとして2種類のダウンロードリンクを含めることができる。

"as"(acceptable source)
多くのクライアントは、"as"を優先順位の面で"xs"トークンと同等に扱い、仕様で示されるタイムアウトを無視して"as"ソースへ接続する。
コンテンツアドレス可能なウェブURL
この種のRFC 2168に基づくリンクは、GnutellaおよびGnutella2で使用される。[8]
xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ URN containing a file hash ]
xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
ファイルのソースを探すためのDirect Connectハブへのリンク
この種のリンクは、指定されたハブへ直接ダイレクトコネクトクライアントを接続する。
xs=dchub://[hub address]:[hub port]
Gnutella2上のファイルのウェブベースのソースキャッシュへの参照
この場合、リンクはクライアントのIPや直接的なソースではなく、同一ファイルをダウンロードする他のクライアントのIPを保持するソースキャッシュを指す。クライアントがキャッシュに接続すると、他のソースのIPが提供されると同時に、そのクライアントのIPもキャッシュに保存され、次に接続してくるクライアントに転送される。このシステムはBitTorrentトラッカーと類似して機能する。
xs=http://cache.freebase.be/[ SHA-1ハッシュ ]
eD2kソースへの参照
xs=ed2kftp://[client address]:[client port]/[ed2k hash]/[file size]/

補足形式(x.)

[編集]

実験的または自己補完的な非公式オプションには、接頭辞x.の後に任意の接尾文字を付けて使用できる。これらの名称が標準化されることは決してない。

x.[新しいパメータ]=[新しいパラメータのデータ(URLエンコード済み)][要出典]

クライアント

[編集]
クライアント dn xl xt tr xs as kt mt ws
AMule Yes Yes urn:ed2k: No 不明 不明 不明 不明 不明
ApexDC++ Yes Yes urn:bitprint:
urn:tree:tiger:
No dchub:[Note 1] dchub:[Note 1] No No 不明
BitComet Yes Yes urn:btih: Yes Yes1.76 No No No Yes1.74[9]
Bitflu英語版 Yes No urn:btih: Yes No No No No 不明
Deluge Yes No urn:btih: Yes No No No No 不明
EiskaltDC++ Yes Yes urn:tree:tiger:
urn:bitprint:
urn:btih:[Note 2]
urn:btmh:[Note 2]
No dchub:[Note 1]
adc:[Note 3]
adcs:[Note 4]
dchub:[Note 1] Yes No 不明
FlylinkDC++ Yes Yes urn:tree:tiger:
urn:bitprint:
urn:btih:
No dchub:[Note 1]
adc:[Note 3]
adcs:[Note 4]
dchub:[Note 1] Yes No 不明
gtk-gnutella英語版 Yes Yes urn:sha1: No http:
push:
Yes Yes No 不明
KTorrent Yes No urn:btih: Yes No No No No 不明
LimeWire Yes Yes urn:sha1: No http:
urn:guid:
不明 No No 不明
MonoTorrent Yes Yes urn:btih: Yes No Yes No No 不明
μTorrent Yes No urn:btih: Yes No No No No Yes
qBittorrent Yes Yes[10] urn:btih:
urn:btmh:
Yes 不明 不明 No No 不明
Shareaza Yes Yes urn:bitprint:
urn:btih:
urn:ed2k:
urn:md5:
urn:sha1:
urn:tree:tiger:
Yes[Note 5] http:
ftp:
http:
ftp:
(xsと同じ優先度)
Yes No 不明
Tixati Yes Yes urn:btih: Yes Yes Yes 不明 不明 Yes
Transmission[2][11] Yes No urn:btih: Yes No No No No Yes[12]
Vuze Yes Yes urn:btih:
urn:sha1:
Yes Yes5.7.5.0 Yes5.7.5.0 No No Yes

関連項目

[編集]

脚注

[編集]

注釈

[編集]
  1. ^ a b c d e f dchub://[hubaddress]:[hubport]
  2. ^ a b 外部ソフトウェアへのリンクを渡す
  3. ^ a b adc://[hubaddress]:[hubport]
  4. ^ a b adcs://[hubaddress]:[hubport]
  5. ^ v2.5.1.0以降

出典

[編集]
  1. ^ a b BitTorrent v2”. BitTorrent (2020年9月7日). 2020年10月30日時点のオリジナルよりアーカイブ。2020年9月21日閲覧。
  2. ^ a b magnet-test.c in trunk/libtransmission; Revision 9531”. Transmission. 2012年2月17日時点のオリジナルよりアーカイブ。2012年2月4日閲覧。
  3. ^ a b c d BitTorrent Enhancement Proposal 9: Extension for Peers to Send Metadata Files”. bittorrent.org (2017年3月26日). 2022年10月10日時点のオリジナルよりアーカイブ。2022年11月4日閲覧。
  4. ^ Houlihan, タイラー (2017年5月24日). “Magnet URI extension - Select specific file indices for download”. BitTorrent.org. 2024年12月30日閲覧。
  5. ^ libtorrent/magnet_uri.cpp at 64817e0e8793d0875fc10245de52ffb2540a223d · arvidn/libtorrent”. libtorrent. 2022年11月4日時点のオリジナルよりアーカイブ。2022年11月4日閲覧。
  6. ^ BitTorrent Enhancement Proposal 53: Magnet URI extension - Select specific file indices for download”. BitTorrent.org (2017年6月6日). 2022年10月10日時点のオリジナルよりアーカイブ。2022年11月4日閲覧。
  7. ^ bep_0005.rst_post”. bittorrent.org. 2022年5月12日閲覧。
  8. ^ Chapweske, Justin (2001年11月29日). “HTTP Extensions for a Content-Addressable Web”. www-talk. W3C. 2011年7月28日時点のオリジナルよりアーカイブ。2010年11月7日閲覧。
  9. ^ v1.74 Core Improve: support ws parameter in Magnet URI, to add web seed”. bitcomet. 2021年4月10日時点のオリジナルよりアーカイブ。2021年4月7日閲覧。
  10. ^ Add eXact Length parameter when creating magnet URI”. GitHub. 2024年12月29日閲覧。
  11. ^ magnet.c in trunk/libtransmission; Revision 9979”. Transmission. 2012年2月17日時点のオリジナルよりアーカイブ。2012年2月4日閲覧。
  12. ^ magnet.c in libtransmission: Commit 5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a”. Transmission. 2021年9月4日時点のオリジナルよりアーカイブ。2021年9月4日閲覧。

外部リンク

[編集]