初カキコ…ども… 俺みたいなブロックチェーンしてる鎖野郎、 他に、いますかっていねーか、はは（ブロックチェーン上取引の匿名性を担保するためのstealth address）

## 初カキコ…ども…

初カキコ…ども… 俺みたいなシェアハウスでブロックチェーンしてる鎖野郎、 他に、いますかっていねーか、はは

今日のハウスの会話
あのエディタかっこいい とか あの言語やりたい とか
ま、それが普通ですわな

かたや俺は電子の砂漠でハッシュ値を見て、呟くんすわ
it's a crypto wolrd．イキってる？それ、誉め 言葉ね。

好きな暗号 ElGamal暗号
尊敬する人間 サトシ・ナカモト（クレイグライトはNO）

なんつってる間にBTC暴落っすよ(笑) あ～あ、暗号通貨の辛いとこね、これ

## 俺みたいなシェアハウスでブロックチェーンしてる鎖野郎、 他に、いますかっていねーか、はは

[全然テックじゃないテックレジデンスのアドベントカレンダー](https://adventar.org/calendars/4894)の14日目の記事です…ども…

上のレジデンスに住んでいたのですが…全然テックじゃなかったという記事が書かれ(`ttps://monmon.hatenablog.com/entry/2019/12/11/xxxx-residence?fbclid=IwAR0qnjeQELEuXk9js5-K_I8cslStZimrcOpKbHRWORheDJTGNk_x2f7AT2Q`)

から以下のような文があって、

> 技術的な話題もブロックチェーンだったりXRだったり。キラキラしたカッコイイ技術を聞こえよがしに語りますよね。

> 意識高い感じ。イキってなんぼの世界なのかな。

とあったのでブロックチェーン担当として何か書くかという、やれやれっすわ。イキるってのがよくわからないけど笑、ちなみに俺オタクだけどこう見えて運動はできる方だし部活も中高合わせて3回も関東大会出てたしブロックチェーンできるよ？

## it's a crypto wolrd

つーわけでこの記事では、テックっぽいことを書くために、ブロックチェーン上取引の匿名性を担保するための暗号理論について解説します

Bitcoinをはじめとした暗号通貨は取引がブロックチェーン上に透明性のある状態で保存され、誰にでも取引がみることができます

アドレスしかみられないものの、アドレスと本人を紐づける情報が何らかの形で手に入れられたら、トランザクションから利用アドレスがわかるため、Walletの残高が知られることになり、残高を狙った人間に襲われるかもしれません、辛いとこね、これ、Welcome to underground

Moneroという暗号通貨ではこれを暗号を使って解決し、プライバシーを高めようとしてる

匿名性要件は以下2点をあげています、ま それが普通ですわな

- 追跡不能性(Untraceability): それぞれの受領トランザクションにおいて、送金者であると見込まれる可能性は誰であっても等確率であること。 
- リンク不可能性(Unlinkability): どの二つの出金トランザクションにおいても、それらが同じ人から送られたと証明することは不可能であること。

この記事では、Unlinkabilityな支払い手段として、stealth addressという仕組みを説明します

## イキってる？それ、褒め言葉ね

アドレス間でリンク不可能な支払いを実現する手段を書きます…ビットコインなど通常の暗号通貨では、送金者と着金者が紐付けられます。また、着金者のアドレス所有者が一度判明した場合、着金・送金履歴から所有者の残高などが判明します。

Moneroではユーザがアドレスを公開しながらも、着金元・送金先とのリンク不可能な支払いを受けることを可能にする解決策を提案されています。

それがstealth addressです。下図の $P=H_s(rA)G+B$がstealth addressであり、送金時にランダムに作成した値r、着金者の公開鍵$(A,B)$から作成しています。Moneroは特殊な仕様としてview key/spend keyという２つの鍵をセットにしているため、A,Bと２つの鍵が存在しています。stealth addressは一回限り（ワンタイム）の公開鍵です。

<img width="876" alt="Screenshot 2019-12-14 00.29.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550186/ad9ee3b4-a339-a7f8-fc7c-f03b5ce7f066.png">

AliceとBobの取引を考えてみると以下になります。

- AliceはBobに送金したいと考えている。Bobは自分のアドレスを公開していることを前提とする。AliceはBobのアドレスから、Bobの公開鍵（A,B）を確認する
- Aliceはランダムな数列rを作成する。rを用いてstealth addressの公開鍵 $P = H(rA)G+B$ を計算する。A,BはBobの公開鍵である
- Aliceはstealth addressの公開鍵Pを宛先のキーとして扱い、$R = rG$をトランザクション内に包含する。rとed25519(EdDSA)ベースポイントGから数値Rは計算されている
- Aliceは送金トランザクションをstealth addressに送る。トランザクションにはRとワンタイムアドレスの公開鍵Pが内包されている
- Bobは、自分の秘密鍵(a,b)を用いて全てのトランザクションをチェックし、$P’ = Hs(aR)G + B$を計算する。もしBobが着金者である、Aliceとの取引がその中にあった場合,$aR = arG = rA$ かつ $P' = P.$となる。各等式についての理由は以下に示す。
  - $aR = arG:$ RはAliceの作成したランダム数値rとベースポイントGを掛け合わせた数値であり、RはrGに等しい
  - $arG = rA:$ aGはBobの秘密鍵aとベースポイントGの掛け算の数値であり、Bobの公開鍵Aと等しい。そのため、arGはrAに等しく、$aR = arG = rA$である
  -  $P' = P:$ $P’= Hs(aR)G + B$で、$P = Hs(rA)G + B$であり、前式より$aR = rA$ であるため、$P' = P$となる。
  
<img width="883" alt="Screenshot 2019-12-14 01.09.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550186/fec7b7af-1b2a-4909-ac59-c96f28296d58.png">

- Bobは、対応するワンタイム秘密鍵$x = Hs（aR）+ b$を$P = xG$として復元することができる。xを使ってトランザクションに署名することで、いつでもこの出力を使うことができる。

つまり、使い捨てのアドレスを作成し、使い捨てアドレスへの送金が自分であるかを着金者しかしらない情報で確認することで残高を更新することができます。

誰宛への送金かはブロックチェーンで第３者からはわかりません。

## あ～あ、暗号通貨の辛いとこね、これ

まだまだ匿名性を担保する方法はあるんですが、とりあえず今日はこの辺にしときますわ。

> 技術的な話題もブロックチェーンだったりXRだったり。キラキラしたカッコイイ技術を聞こえよがしに語りますよね。

> 意識高い感じ。イキってなんぼの世界なのかな。

数式と暗号理論でイキってなんぼの世界ですわ、あーあ、暗号通貨の辛いとこね、これ

こないだdqnに絡まれた時も気がついたら意識無くて周りに人が血だらけでバタバタ倒れてたしな

### 参考

- Cryptonote Whitepaper
https://cryptonote.org/whitepaper.pdf

- Mastering Monero
https://masteringmonero.com/

- 初カキコ...ども...
https://dic.nicovideo.jp/a/%E5%88%9D%E3%82%AB%E3%82%AD%E3%82%B3...%E3%81%A9%E3%82%82...

- イキリト
https://dic.pixiv.net/a/%E3%82%A4%E3%82%AD%E3%83%AA%E3%83%88