NanoWallet向けのDNSモジュール「NEM DNS」

 最終更新日2018/11/07 公開日2018/11/07    この記事は 約9分 で読めます。

この記事の原文は2018年8月に書かれたものですが、Nanowalletの「サービス」メニューの一番下に追加されており、個人的に気になったので訳してみました。

NEM DNSはNEMブロックチェーンを使ってよりセキュアなDNSを実現させようというプロジェクトで、取得したネームスペースを使って.nemドメイン(例:helloworld.nem)を設定する方法が書かれています。興味がある人の参考になればと思います。

以下、和訳です。

NEM DNS

このブログ記事では、例えばドメインをIPアドレスに変換するといった、インターネットサービスに向けた分散型でスマートな信頼性の高いDNSサービスに、NEMブロックチェーンをいかにして活用することができるかを説明します。プロジェクトには次のようなものが含まれます。

・MITライセンスのGitHubコード
・ドメイン名のIPアドレスへの変換
・関連情報のドメイン名検索
・.nemのドメイン所有者に向けた、容易にアップデート可能なレコードの実演

DNSとは何か?

ドメインネームシステム(DNS)は、コンピュータ、サービス、もしくはインターネットやプライベートネットワークに接続した他のリソースに向けた、階層的なネーミングシステムです。

DNSは様々な情報を、それぞれの参加者に割り当てられたドメイン名と関連付けます。最も顕著な例として、DNSはよりスムーズに記憶ができるドメイン名を、数字で表したIPアドレスへと変換します。

そうしたIPアドレスは、基盤となるネットワークプロトコルを持つコンピュータサービスやデバイスを発見し特定するために必要となるものです。

世界規模の分散型ディレクトリサービスを提供することで、DNSはインターネット上の機能の必要不可欠な要素となっており、1985年から使用されています。

なぜブロックチェーンDNSが必要なのか?

その高いパフォーマンスにも関わらず、従来のDNSシステムには多くの短所があります。

従来型のDNSは攻撃に対して弱く、例えば、攻撃者は中継キャッシングサーバーへのDNSレスポンスをハイジャックすることで、DNSをハックし、あなたの情報を偽のウェブサイトに転送することが出来てしまいます。

世界の多くの地域で、当局はある程度正当な理由によって、ドメインを検閲しブロックしています。ドメイン名を所有し維持するための費用は高額になることもあり、ドメインレコードの更新はスローで時間がかかります。

NEMはピアツーピアのネットワークで、ドメインレジストラ、ドメインゾーン所有者、中継キャッシュを持ちません。

NEMブロックチェーンはもっとも安全なブロックチェーンの一つだと証明されており、情報の改善を行うことはできません。

それぞれのNISはブロックチェーン全体の検証済みのコピー、つまりドメインネーム、メッセージ、トランザクションの完全なデータベースを持っています。

データの信頼性は、すべてのNISがブロックチェーン技術とパブリックなコンセンサスメカニズムによって保証されているため、データベースはすべて同一であるという事実に基づいています。

それぞれのプライベートキーの所有者を除けば、レコードが送信されて検証された後には、誰もそれを変更したりキャンセルすることはできません。

ネームスペースの管理

NEMネームスペースの所有者は、NEM DNSをわずか数ステップで使用することができます。

DNSは、NEMエコシステム内のネームスペースプラットフォームと割り当てられたポインタアドレスを使用して構築されています。

ネームスペースの所有者は、ネームスペースに関連した情報と共に、暗号化されていないjsonフォーマットのメッセージを含むトランザクションをネームスペースのポインタアドレスに送信する必要があります。

そのメッセ―ジには、IPアドレス、所有者情報、物理アドレス(住所)、連絡先アドレスなどが含まれることもあります。そのレコードをアップデートするためには、所有者は新しい情報を含む新規のトランザクションを送信するだけで済みます。

JSONオブジェクトの例

{"dns":"yes","ip1":"your ip", "email": "your email"}
// the "dns" = "yes"キーはメッセージがDNS情報を含んでいることを示します。
// the "ip1"キーはあなたの.nemドメインに関連するプライマリIPです。

ポインタアドレス(PA)は、ネームスペース名をハッシュして、NEMパブリックアドレスを抽出することで、sha256だとわかりました。

ポインタアドレスの例

function getPointerAccount(namespace){
passphrase = nem.crypto.js.SHA256(namespace);
var privateKey =  nem.crypto.helpers.derivePassSha(passphrase, 1).priv;
var keyPair = nem.crypto.keyPair.create(privateKey);
var publicKey = keyPair.publicKey.toString();
var address = nem.model.address.toAddress(publicKey, nem.model.network.data.testnet.id);
return address;
}
pointerAdd = getPointerAccount('helloworld');
ネームスペース'helloworld'に向けられた//getPointerAccountは、TCGD57YKW5TFEY5TWTN7XBJXEZBGGURYXJ54FLDEを返します。

DNS内の検索

DNS内の検索は、NanoWalletを使って行うことができます。.nemドメインの検索をリクエストする際に、アルゴリズムは二つのNISリクエストを行います。その最初のものはドメイン所有権の立証を行います。

例:
http://104.128.226.60:7890/namespace?namespace=helloworld

返信されたJSONオブジェクトの例

{"owner":"TCFSDG3XDH2SXWPVJ2Q4LV2SLS57TFJUATT2UJSZ","fqn":"helloworld","height":1387671}

ドメインの所有権が立証されると、アルゴリズムはポインタアドレスに関連する第二のリクエストを行います。

このリクエストは、所有者のアカウントから送られてくるトランザクションを探します。トランザクション中を循環しつつ、DNS情報を使って最新のDNSトランザクションの検索を行います。

例:
http://104.128.226.60:7890/account/transfers/incoming?address=TCGD57YKW5TFEY5TWTN7XBJXEZBGGURYXJ54FLDE

var stop =0;
$.each(data['data'], function( index, value ) {
if ( nem.model.address.toAddress(value['transaction']['signer']...
, nem.model.network.data.testnet.id)== ownerAdd){
var payload = convertFromHex(value['transaction']['message']['payload']);
var objPayload = jQuery.parseJSON( payload );
if (objPayload['dns']=='yes' && stop==0){
stop =1;
if(typeRe==1){window.location ='http://'+objPayload['ip1']};
if(typeRe==2){alert(payload);};
}
}
});

このプロジェクトのコードはMITライセンスの下でGitHubを通じて入手可能です。プロジェクトとウェブサイトデモはGitHub 2からダウンロード可能で、もしくはNEMのNanoWallet内で実装されたものを試用することもできます。

 - NEM(ネム) , ,

  著者プロフィール

お忙しいところ、貴重なお時間の中での当サイトへのご訪問ありがとうございます。

WEBデザイナー/ディレクターとしてのリーマン生活を脱却し、FX専業(兼業?)トレーダーをやりながら、MT4のEA/インジケーターの開発やFX関連情報サイトを運営していました。

今ではもう暗号通貨に絞って福岡を拠点に隠密活動しています。主にNEMをガッツリ、EthereumのDappsは趣味程度に。10年近いトレーダー経験を活かし、暗号通貨相場のテクニカル分析もやってます。

またの機会にぜひ当サイトをご利用いただけるご縁があればとても嬉しく思います。今後ともよろしくおねがいいたします。