tezos
Tezos テストネット演習



DaiLambda, Inc.
Jun FURUSE/古瀨 淳
Nagoya university, 2023-04-14

授業に関する質問、問い合わせ

授業中直接か、TACT で聞いてください。

目的

ブロックチェーンを実際に使い、その技術の理解を深める

おことわり

この解説はブロックチェーン技術を理解を助けるためのものです。 暗号通貨の売買を奨励するものではありません。

金銭的価値をともなう実トークン取引は、投機対象としては高リスクであることを理解し、 自己責任で行ってください。

テストネット: テスト環境

メインネット

本番環境。金銭価値を持ったトークン(暗号通貨)が使われる

  • トークンは交換所などで購入する
  • 金銭的リスクがある (誤送金、鍵紛失、詐欺、暴落、etc)
テストネット

ブロックチェーンシステム自体や、チェーン上のサービス、アプリのテストを行う場

  • トークンに金銭的価値はなく、無料で入手可能
  • 金銭的リスクはない

演習にはテストネットを使用します。

Tezos テストネット

演習では Tezos テストネット “Ghostnet” を使います。

理由:

  • 今も開発がちゃんと進んでいる
  • 教える人がよく知っているから

他のブロックチェーンでも手順は同じです

スライドの注意

Tezos 特化の内容を含む場合、タイトルに がついています。

がついていても、一部一般的な内容であることもあります。

演習内容

  • ウォレットの起動
  • アカウント(秘密鍵)の作成
  • テストネット無料トークンの入手
  • テストネットでの送金
  • エクスプローラを使った送金の確認

ウォレットの起動とアカウントの作成

ブロックチェーン・ウォレット

ウォレットとは: 公開暗号鍵暗号による署名ツール

  1. 秘密鍵を保管
  2. ユーザーの送金(ブロックチェーン操作)命令に秘密鍵で署名
  3. 署名済み命令をブロックチェーンに送る

「財布」とはいうが、その中に暗号通貨自体が保存されているわけではない。

Tezos ウォレット

Tezos のウォレットは複数ありますが、演習では Kukai wallet を使います。

https://ghostnet.kukai.app/

  • ウェブブラウザで動作
  • インストール作業の必要がない
  • ちょっと使いにくい…
    (ほんとうは UmamiTemple をお勧め)

Kukai ウォレット

https://ghostnet.kukai.app/

Create New Wallet

秘密鍵生成

鍵生成のための乱数種(シード)。記録してください。

シードの答え合わせ

ちゃんと記録しているかを確認:

パスワードによる暗号化

シードに加えパスワードを設定。
聞かれることがあるので暗記できるものを:

アカウントが作成される

DOWNLOAD: シードデータを保存:

ウォレット準備完了!

OPEN WALLET で開く

できました

アカウントアドレス tz1… をコピーしてメモしてください:

何が行われたのか

  • 乱数シードの生成
  • パスワードの設定
  • シード+パスワードから秘密鍵を生成
  • 秘密鍵から公開鍵を生成
  • 公開鍵からアカウントアドレスを生成
シード+パスワード → 秘密鍵 → 公開鍵 → アカウントアドレス

アカウントアドレスから公開鍵、公開鍵から秘密鍵への逆算は
(現実的な時間では)できない

秘密鍵衝突のリスクはほぼ0

偶然、他人が自分と同じシードとパスワードを選ぶと、
他人が自分の秘密鍵を得てしまう:

  • 他人が自分のアカウントを操作可能
  • 他人が自分の暗号通貨を使える

ちゃんとしたウォレット実装では衝突はまず起こらない:

  • ハードウェア乱数発生器
  • 弱いパスワードの排除

が…乱数発生器にバグがあると衝突する

秘密鍵情報の保存

秘密鍵自体をウォレットに保存するのは危険! だからしない。

保存されるもの:

  • 乱数シード: ウォレットソフトウェア内に保存 + バックアップファイル
  • パスワード: ユーザーの脳内に暗記 (本演習ではメモしておいてOK)

秘密鍵による署名が必要な場合:

  • ユーザーの脳内からパスワードを得る
  • シードとパスワードから秘密鍵を生成
  • 署名後はコンピュータから速やかに秘密鍵を消し去る

秘密鍵漏洩の危険

署名の瞬間、コンピュータのメモリ内にパスワードや秘密鍵が存在する。

ソフトウェアウォレット

ネットに繋がったコンピュータで動作するウォレット。

コンピュータがハックされていると、秘密鍵を盗まれる恐れがある。

ハードウェアウォレット

署名作業のみを行う電子的に隔離されたハードウェア

非常に単純な機能しかないコンピュータ:

  • シードを保存
  • 署名するデータを受け取る
  • シードと入力されたパスワードを使って署名し、送り返す
  • それ以外の機能はない
    • ネットには繋がらない
    • シードを電子的に取り出せない
    • パスワードを電子的に送ることもできない
  • 分解して解析すれば…シードを盗めるかもしれない

ハードウェアウォレットを使うのは面倒

使い分けが肝心

金庫としてのハードウェアウォレット
たまにしかアクセスしない、高残高アカウントの秘密鍵管理に。
財布としてのソフトウェアウォレット
日々使う小銭はソフトウェアウォレットで管理するアカウントに。

もし秘密鍵情報を無くしたら、盗られたら

もし秘密鍵情報を無くしたら

アカウントを回復する方法はありません。 無くさない!!

ウェブサービスによくある、

  • 「パスワードを忘れた」
  • 「秘密の質問」
  • 「二重認証」

のようなものはありません。

  • 本演習では、テストネットアカウントを作成しなおしてください。
  • 本番環境では…ご愁傷様、暗号通貨を取り戻すことはできません。
    「セルフGOX」

秘密鍵情報を無くさないためには

シードのバックアップを取る

  • 複数のコンピュータシステムに保存
  • プリントアウトして複数の場所に保管

パスワードは忘れない

  • とはいえ、いつか必ず忘れるので、バックアップは取る
  • ただし、バックアップへのアクセスを非常に難しくする
    • 分割して複数箇所(実家、貸金庫)に保管

シードファイルとパスワードがあれば

ウォレットにインポートすることで、アカウントを回復できます:

Kukai では:

  • 保存した hd-wallet.tezImport wallet でインポート。
  • 設定したパスワードを入力

もし秘密鍵、シード+パスワードが漏洩したら…

アカウントを所有している = 秘密鍵を所有している

漏洩先は秘密鍵を使ってアカウントの暗号資産を別アカウントに移すことができる。

別アカウントに移されてしまうと、取り戻すことは不可能:

  • ブロックチェーンには送金をキャンセルしてくれる管理者はいない。
  • 警察に被害届を出すべきだが、あまり助けにはならないと思われる。

秘密鍵が漏洩したかもしれないと思ったら

早急に新しいシードとパスワードから別のアカウントを作り、そこに全額退避。 古いアカウントは捨てる。

アカウントアドレスは秘密鍵から生成されるので、
シード+パスワードを変更して同じアカウントを使いまわすことはできません:

シード+パスワード → 秘密鍵 → 公開鍵 → アカウントアドレス

現在進行中

Ethereum で多数のウォレット秘密鍵が抜かれ、13億円の被害

素人に秘密鍵の管理など不可能では?

信頼できる機関、企業(カストディアン)に託す

利点:

  • 秘密鍵の管理やブロックチェーンへのアクセスはカストディアンが代行
  • カストディアンサービスのパスワードを忘れても再発行してくれる

欠点:

  • 管理手数料
  • カストディアンが窃盗にあったり、詐欺師である可能性
  • ブロックチェーン使う意味がない

自己管理とカストディ双方のリスクを比べ上手く利用すべき

テストネット無料トークンの入手

トークンの入手

“Faucet”(蛇口)からテストネット用トークンを手にいれる https://faucet.ghostnet.teztnets.xyz/

“Connect wallet” をクリック:

ウォレットとの連携設定

Kukai Wallet を選択:

ウォレット側で連携を許可

CONNECT をクリック:

トークンの送金依頼

“My wallet” で連携を確認、 “Request 100 tz” をクリック:

着金を確認

しばらく待っていればトークンが手に入るはず:

テストネットでの送金

サブアカウントの作成

HD (Hierarchical Deterministic) wallet
マスター秘密鍵から複数の派生秘密鍵を生成できる。

送金先のために “+” を押してサブアカウントを作る。
新アカウント名はコピペしておく:

HD サブアカウントの安全上の注意

同じシードとパスワードから導出されているので、
シードとパスワードが漏洩した場合は HD サブアカウントも危険。

アカウントの選択

プルダウンメニューでアカウントを選択

送金 #1: 送金元を指定

残高のあるアカウントで↗︎を押す:

送金 #2: 送金内容を指定

送金額と送金先(サブアカウント名)を入力し、PREVIEW︎を押す:

送金 #3: ブロックチェーンへ送金命令を発行

送金には少額の手数料 (FEE, STORAGE COST) がかかります。

確認後、パスワードを入れ、CONFIRM を押すと送金される:

送金 #4: ブロックチェーンでの送金完了確認

ブロックチェーン上で送金が完了すると、
Confirmed と表示される:

着金: サブアカウントウォレットでの確認

サブアカウントで着金を確認:

何が行われたのか

  • オペレーション(送金命令)の生成
  • オペレーションへの電子署名
    • シードとパスワードから秘密鍵を得る
    • 秘密鍵による署名を行う
  • 署名付きオペレーションをブロックチェーンに送る
  • ブロックチェーンがオペレーションを実行、金額が移動
  • 送金完了をブロックチェーン上で観測

エクスプローラ

View in Explorer でブロックチェーン上のアカウント情報を見る:

エクスプローラ

View in Explorer でのアカウント情報:

エクスプローラ: 送金元

送金元も確認してみよう:

エクスプローラ: 送金元

Faucet からの入金とサブアカウントへの出金が記録されている:

エクスプローラ

ブロックチェーン・エクスプローラは自分のアカウントだけでなくブロックチェーンの全ての情報を見ることができる。

TzKTエクスプローラ

まとめ

シードとパスワードから秘密鍵を生成

  • 秘密鍵とアカウントは1対1対応
  • 無くしたり、盗まれたりしてはいけない

アカウント情報への変更(=送金)は秘密鍵で認証

  • 送金命令に秘密鍵で署名
  • ウォレット: 署名ソフトウェア

ブロックチェーン上のデータは公開情報。読み出しに認証は不要

  • 誰でもエクスプローラで他人のアカウントの残高を見れる

演習

  1. Tezos Ghostnet にアカウントを作成し、そのアカウント名 tz1…
    を提出してください
  2. Faucet から無料のトークンを入手して作成したアカウントに入金してください
  3. 上記のアカウントから、次の私のアカウントに 1 tez のトークンを送金してください

tz1SNR3FxhAVWWE7Q11nifi4EkwQTuqSED95

作った秘密鍵情報はあとの演習でも使うかもしれないので、無くさないで!