Cryptocurrency Research Lab.

Cryptocurrency関連技術についての調査・研究

【RippleAPI】⑦ Regular key

もし、あるアドレスのsecretキーもしくは署名に使う秘密鍵が事故等により流出してしまった場合、そのアドレスはもう危険だから使わないようにしないといけないでしょうか。

XRPではgenerateAddress()関数などによって生成されるsecretがあれば、そこから公開鍵と秘密鍵が取得できます。これらをMaster Keyペアと呼びますが、秘密鍵があればトランザクションに署名ができてしまいますので厳重な管理が必要です。

しかし、どんなに万全を期していても事故を100%防ぐことはできませんから、たとえ流出してしまったときでも対策できることが重要です。

XRP LedgerにはRegular Keyという仕組みがあり、これを登録しておけばMaster Keyを使わずに署名できます。また、Master Keyを無効化することができますので、万が一、Master Keyが漏れてしまった場合でも被害を抑えることができます。

このことから、普段からRegular Keyで運用し、Master keyはあらかじめ無効化してオフラインで厳重に保管しておくのが安心です。そうすれば、万が一使用しているRgular Keyが流出した場合でも、別のRgular Keyに切り替えるだけで済みます。

Regular Keyの登録

Regular Keyには新たに生成したアドレス(r~)を指定すればよいでしょう。

const RippleAPI = require('ripple-lib').RippleAPI;

const api = new RippleAPI({
  // Test Net
  server: 'wss://s.altnet.rippletest.net:51233'
});

let address = '<アドレス>';
let secret = '<シークレット>';
let regularKey = '<Regular Key>';

async main() {
  try {
    await api.connect();

    let settings = {
      regularKey
    };

    let prepared = await api.prepareSettings(address, settings);
    const {signedTransaction} = api.sign(prepared.txJSON, secret);

    let result = await api.submit(signedTransaction);
    console.log(result);

    await api.disconnect();

  } catch (e) {
    console.error(e);
  }
}

main();

Master Keyの無効化

const RippleAPI = require('ripple-lib').RippleAPI;

const api = new RippleAPI({
  // Test Net
  server: 'wss://s.altnet.rippletest.net:51233'
});

let address = '<アドレス>';
let secret = '<シークレット>';

async main() {
  try {
    await api.connect();

    let settings = {
      disableMasterKey: true,
    };

    let prepared = await api.prepareSettings(address, settings);
    const {signedTransaction} = api.sign(prepared.txJSON, secret);

    let result = await api.submit(signedTransaction);
    console.log(result);

    await api.disconnect();

  } catch (e) {
    console.error(e);
  }
}

main();