コミックマーケットC93

コミックマーケットC93で↓の本を頒布した。

ZIP、完全に理解した

f:id:kusano_k:20180121012800j:plain:w320

COMIC ZINで委託販売をしている。

http://shop.comiczin.jp/products/detail.php?product_id=35822

次のために諸々メモ。

刷り部数

前回と同じく100冊刷ったが、12時ちょっと前に完売。 もっと刷るべきだった。 とはいえ、CTFよりさらにニッチだし、告知ツイートのRTやFavもそんなに多くはなかったので、これでも強気のつもりだったのだが……。 ただ、前回は誰かに頼まれて複数買っていく人がいたけど、今回はそういう人がいなかったし、CTFほど売れなかったとも思う。

決済手段

Squareに使える端末がスマホしかなかった。 リーダーを接続するときにちょっと時間が掛かるので、タブレットを持っていって繋ぎっぱなしにしたほうが良かったかもしれない。

ポスター

PO.SU.TAのProとminiを買った。 高いがこのコンパクトさはすごい。 ケースも厚手でサイズがピッタリなので良い感じ。

kinko'sで値段を確認せずにA2サイズのポスターを印刷したら4,000円かかった。 印刷前に「仕上がりはこんな感じになります」と一部分を試し刷りしてくれたり、やけに丁寧だと思ったら……。 印刷所で本と一緒に注文すると余白カット付きでも2,000円らしいので、次からはこっちにしよう。 後ろにポスタースタンドがある時点で邪魔になるので、サイズはA1で良さそう。

ビットコインの送金手数料を安くしすぎてしまった場合の対処法

ビットコインの送金手数料

私が「1 BTC(約100万円)を持っている」というのが実際にはどういうことかというと、「私が秘密鍵を知っている公開鍵Xに対しての1 BTCの送金がビットコインブロックチェーンに存在する」ということである。 私がここから、0.01 BTCをAさんに送金して、マイナーには0.0001 BTCの送金手数料を支払おうとしたとき、私の使っているクライアントは「公開鍵Xから0.01 BTCをAさんの公開鍵に、0.9899 BTCを私の別の公開鍵Yに送金する」という取引指示を公開鍵Xに対応する秘密鍵で署名してビットコインのネットワークに送信する。大量のビットコイン採掘用ASICを抱えるマイナーは、この取引をブロックに詰めて、ブロックのnonceの値を試行錯誤してブロックのハッシュ値をある閾値よりも小さくする。これが成功して新しいブロックをチェーンに繋げることができると、マイナーは採掘報酬の12.5 BTCと、私の取引の入力と出力の差である0.0001 BTC(と、ブロックに詰めたその他の取引の手数料)が手に入る。

マイナーは当然ビットコインが欲しいので、手数料が高い取引を優先してブロックに詰める。 早く承認してほしければそれだけ手数料を積む必要がある。 最近この手数料が高騰していて「1時間以内にブロックに詰めてほしいな」と思うと、1,000円くらい払う必要がある。 ビットコインなら銀行送金に比べて手数料が格安という話が昔はあったなぁ……。

別に急ぐ送金でもないしケチるかと思って手数料を数円にしてしまったら全くブロックに含められなくて困った。 昔ならこれでも待っていれば何とかなったけど、最近は送金が多すぎてブロックは常にいっぱいなのでこんな安い手数料が詰められることはもはやなさそう。

Replace-by-Fee

公開鍵Xからの送金がブロックに含められていないということは、公開鍵Xにはまだビットコインが残っているということで、ここから手数料を上乗せした別の取引を作るという手がまず思い浮かぶ。 が、これは上手く行かない。 ビットコインのネットワークは、すでにネットワーク上に存在する取引と衝突する取引は(その取引がブロックに含められる前でも)拒否する(という動作がリファレンス実装)。

これを認めてしまうと二重支払いが容易になって、ビットコインの使い勝手が悪くなるかららしい。 逆に、これが認められていないので、ビットコインを支払われた側は取引がネットワークに広まった時点である程度は安心できる。

最初の送金時に「後で上書きするかも」というフラグを付けるReplace-by-Fee(RBF)というプロトコルがあって、Electrumに実装されているらしい。

Opt-in Replace-by-Feeによるトランザクションの置換(BIP-125) - Develop with pleasure!

Electrum2.7系で実装されたビットコインの「opt-in RBF」とは何か - ビットコインの情報サイトの運営者ブログ

待つ

ネットワーク上に送信されて、ブロックに入れられていない取引は各ノードのmempoolに入っている。 Mempoolのサイズは有限なのでそのうち消えるはずで、理屈の上では消えた後ならば、改めて手数料を上乗せして送金できるはず。 ただ、ウォレットアプリが一度送信済みとマークした取引をネットワークから消えたのを検知して元に戻すという処理を持っているのか分からない。 どうなんだろう?

ちなみに、たとえ手数料が低くても古くなった取引は優先度を上げるという仕組みが昔はあったけど、無くなったらしい。

Transaction Accelerator

マイニングプールViaBTCが、指定した取引を優先してブロックに詰めるというサービスを(たぶんボランティアで)行っている。 ここに取引IDを入力すれば良い。 ただ、↑の取引で試したら「手数料安すぎ」と蹴られた。

Transaction Accelerator - ViaBTC

お釣りアドレスを使った新たな取引

上手くいった方法。

最初の説明の「0.9899 BTCを私の別の公開鍵Yに送信する」の公開鍵Yから、それなりの手数料を付けて送金する。 マイナーがこの取引のそれなりの手数料を手に入れるには、最初の手数料の安い取引も同時にブロックに含める必要がある。

Bitcoin Coreならば、設定→オプション→ウォレット→コインコントロール機能を有効化する で送金時にどのアドレスから送金するかを選択できるようになる。 「送り先」を自分のアドレスにして、このアドレスに入っている全額を「金額」に入力し、「送金額から手数料を差し引く」にチェックを入れて、適当な手数料を選べば良い。 マイナーはこの手数料を得るために、2個の取引をブロックに詰める必要があるので、普通に選ぶ手数料の2-3倍くらいにしておくと良さそう。

f:id:kusano_k:20171107012528p:plain

コインコントロール機能が無いウォレットならば、自分の持っている全ビットコインを自分に送金すれば、お釣りアドレスも使われるだろうか? 送金が承認されるまで全ビットコインが使えなくなるかもしれないけど。

たまたま承認されただけかもしれないので、同じように困っている人がいたらこれを試して、上手くいったかどうかとか、ブロックに含めたマイニングプールがどこかとかをコメント欄ででも教えてほしい。

源ノ角ゴシックや源ノ明朝をインストールした環境でmoraダウンローダーが起動しない問題

やっと原因が分かった。

源ノ角ゴシックや源ノ明朝のSuper OTC版(言語・ウエイト全部入り)のフォント名が長すぎて、.NET Frameworkがバグっていた。 アンインストールして、Region-specific Subset OTFを入れ直しましょう。

f:id:kusano_k:20170917154922p:plain:w480

moraダウンローダ

f:id:kusano_k:20170917200512p:plain:w480

moraという音楽配信サイトがある。 クールごとにアニソンをまとめたページがあって便利。 DRMフリー。 過去にはダウンロードは10回までという制限があったが、(明記はされていないものの)今はこの制限も無くなったっぽい。

専用のmoraダウンローダーがある。 これを使うと、複数の曲をまとめてダウンロードすることができ、ファイル名を変えてフォルダ分けして保存してくれる。

今期のアニソンを買ってダウンロードしようとしたら、「moraダウンローダーは動作を停止しました」と出てきて起動しなくて困った。

f:id:kusano_k:20170917174947p:plain

源ノ角ゴシックと源ノ明朝

「げんのかくごしっく」「げんのみんちょう」と読む。Adobeが配布しているOSSフォント。

フリーなのにウェイトが多くて楽しい。 1個のフォントをソフトウェア処理で太字にするのは素人で、プロは最初から太さを変えて作られたフォントを使うらしい。

f:id:kusano_k:20170917195410p:plain

ダウンロードページ(ゴシック明朝)に行くと、種類が色々あってどれをダウンロードして良いのか迷う。 最近のOSにしか対応していないが、Super OTCというのをダウンロードすれば、1ファイルで言語もウェイトも全て揃う。

これが間違いの元だった……。 フォントをインストールすると、レジストリHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fontsに次の2個の値が追加される。長さはどちらも259文字。

  • 源ノ角ゴシック ExtraLight & Source Han Sans K ExtraLight & Source Han Sans SC ExtraLight & Source Han Sans TC ExtraLight & 源ノ角ゴシック Light & Source Han Sans K Light & Source Han Sans SC Light & Source Han Sans TC Light & 源ノ角ゴシック Normal & Source Han Sans K Normal & Sou
  • 源ノ明朝 ExtraLight & Source Han Serif K ExtraLight & Source Han Serif SC ExtraLight & Source Han Serif TC ExtraLight & 源ノ明朝 Light & Source Han Serif K Light & Source Han Serif SC Light & Source Han Serif TC Light & 源ノ明朝 & Source Han Serif K & Source Han Serif SC

中身を見ると、倍くらいの長さのフォント名を書きたがっているように見えるので、どこかで切り捨てられているらしい。

Adobeがこのフォント名にしているならば文句を言いたいけれど、セットになったフォントの名前を&で連結してレジストリの値名にしているのはWindowsだろうか?

調べ方

moraダウンローダーは黙って落ちるので、何も情報は得られない。 .NETだから普通にデバッグはできないし、どうするのだろうと思ったけど、便利なソフトがあった。

dnSpy

アセンブル、逆コンパイル等のソースコード解析作業ではなく、moraダウンローダーがスルーしている例外を調べる目的で使う。 分かりにくいけど「build passing」のバッジからビルド済みのバイナリがダウンロードできる。

このソフト上で実行すると例外が発生したときに、例外の中身が見られる。 $exception変数のInnerExceptionを順番に見ていくと大元の原因が分かる。

f:id:kusano_k:20170917190200p:plain:w480

レジストリが何とかで落ちているので、あとはSysinternals SuiteProcess Monitorを使うと、レジストリにどのような操作をしているかが分かる。 長さ512(たぶんバイトなので256文字)のバッファで読もうとしてエラーが返っていた。 惜しい。 あと4文字長ければ……。

RegEnumValueERROR_MORE_DATAを返しているだけなので、バッファーオーバーフローなどではなく、細工されたフォントをインストールしてmoraダウンローダーを起動するとシステムを乗っ取られるとかはない。

詳細

https://github.com/kusano/mora_not_run

.NET Frameworkの3.5以下の版には、RegistryKey.GetValueが256文字以上の値の名前を列挙できないというバグがあるらしい。 そんな制約は書いてないぞ。

試しに.NET Framework 2.0でウィンドウを作ってみたけれど、フォントの一覧は読みにいかなかったので、何がトリガーなのか分からない。

moraダウンローダーは.NET Frameworkを使っているだけなので、対応するなら.NET Frameworkのバージョンを上げるしかなさそう。

Registry Element Size Limits (Windows)

MSDNを見てみると、値の名前の最大長は16,383文字。 過去には(ANSIだけど)260文字という制約があったこともあるらしい。 フォント名が259文字に切り詰められていたのは、260文字までしか対応していない環境やソフトを意識してのことだろうか。 比べてみると最大長が256文字のRegistryKey.GetValueは雑。

ちなみに、Windowsレジストリエディタは260文字以上の長い値名を表示することはできたけれど、長い値名を設定しようとすると259文字に切り詰められた。

おまけ

moraダウンローダー以外のアプリが28e89a9f-e67d-3028-aa1b-e5ebcde6f3c8というMutexを作成していると同様に落ちる。 ↑のフォントのレジストリを列挙するプログラムでは、ついでにこのMutexを作成しているので、確認ができる。 たぶん、同時起動抑制とかに使っているのだと思う。 この文字列がmoraダウンローダーのGUIDならば何の問題も無いのだけど、これは.NET Framework 2.0のSystem.Reflection.AssemblyのGUID。 何か勘違いをしている?

あと、moraダウンローダーを起動して、最初の1曲目のダウンロードが「エラーコード:21003」で失敗するという問題がある。

サポートに訊いたら、「プロキシ設定やネットワーク通信状況に起因した問題である可能性」と言われたけど、最初の1曲目は常に失敗するし、Twitterを検索しても似たようなことを言っている人がいるし、ネットワークの問題などではないのでは。ついでに直してほしい。

コミケで同人誌を頒布した

東京に引っ越してきて以来、コミケにはだいたい毎回行っている。 「自分でも本を作りたいなぁ」その度に言っていて、やっと実現した。 ちゃんと記録していたわけではないが、費用は10万円くらい、時間は200時間くらいだろうか。 1,000円で100部頒布できたので、だいたい費用の元は取れているはず。

この本を頒布した。

f:id:kusano_k:20170810040428p:plain:w160

http://sanya.sweetduet.info/ksnctfc92/

申込み

申込みの締め切りが意外と早い。 8月の夏コミの締め切りは2月、12月の冬コミの締め切りは8月。 さらに、オンライン申込みであっても、申込書を物理で買う必要がある。 コミケの会場で買うのが一番楽で安い。 次回の申込書の通販の注文締め切りは明日の12時なので、今すぐ注文しないと間に合わない。

https://shop.circle.ms/CShopping/Detail/1364

必要なのは「申込書番号」と「オンライン申込用番号」なので、誰かに余ったものを譲ってもらうならば、とりあえずこの番号だけ送ってもらうという手がある。

申込み多数の場合は「抽選」と書かれているけれど、(たぶん)実際には選考なので、真面目に書く必要がある。サークルカットがつらい。

当落発表

今回の当落発表は6月9日だった。 ここから準備をすると余裕が無いとは思っていたけど、結局何もせず……。

コンテストサイトの製作

コンテストを開催して、その解説を頒布するという趣旨なので、コンテストサイトが必要。

ksnctfは技術的負債の塊で触りたくなかったので、新規にExpressで作った。 ソースコードGitHubに置いている。 Expressはシンプルで良かった。 多人数で大規模なサイトを作ろうとすると、自由度が高い分大変かもしれない。

CSSフレームワークBulma。 綺麗だし、必要なものは一通り揃っているしで、こっちも良い感じ。

本の製作

これが一番重要。 色々迷った末、markdownで書いてpandocでPDFに変換した。 コマンドはこれ。

pandoc 00_preface\preface.md -o 00_preface\preface.latex
pandoc \
  -B 00_preface\preface.latex \
  01_preliminary\preliminary.md \
 : \
  12_colophon\colophon.md \
  -o ksnctfc92.pdf \
  --latex-engine=lualatex \
  -V documentclass=ltjsbook \
  -V papersize=b5 \
  -V classoption=openany \
  -H header.latex \
  --top-level-division=chapter \
  --highlight-style monochrome \
  --toc \
  --toc-depth=2

pandoc -D latexで元になる.latexの中身が出てくる。 ちょこちょこLaTeXのコマンドを本文にも入れる必要が出てきてしまったので、次は全部LaTeXでも良いかもしれない。 あるいは「CSSではじめる同人製作」という本を買ってきたので、この本を参考にHTMLか。 なかなかこれといった方法が無くてつらい。

印刷は写真を元にPhotoshopでゴリゴリと。 フリーソフトとか安いソフトでも何とかなるかもしれないが、デファクトスタンダードなので、PhotoshopIllustratorがあると安心。 しかし高い……。

本の印刷はポプルスに頼んだ。 私が最初に買った同人誌が「空の境界」でポプルスが印刷したものだった。 懐かしい。

2週間前くらいに原稿ができていれば良いイメージ。

決済手段

決済手段を色々と用意した。

http://sanya.sweetduet.info/ksnctfc92/

クレジットカード

Squareのリーダーを買った。 5,000円。 1,000円くらいだった気がしたけど、それは磁気だけでICカード非対応のリーダー。 今は使えないらしい。 VISA、Mastercard、American Expressは登録したらすぐに使える。 その他のJCBなどは審査が必要。 審査まではしていないので、3ブランドだけ使用可。

pixiv PAY

https://pay.pixiv.net/ pixivがコミケの直前に出してきたアプリ。 今回のコミケでも対応しているサークルがたまにあった。 ギリギリだから雑な作りかと思ったら、良くできていて直感的に使える。 1回支払う側で使った。 QRコードを読み取ってボタンを押すだけなので、支払う側も楽。 どうしても現金のほうが速いから、列ができるようなサークルだと厳しいが、そうでもなければけっこう便利そう。

ビットコイン

breadwalletならスマホで受け取れる。 iOS版はApple Watchにも対応していて、Apple Watchの操作だけでQRコードを出して「ここに払ってくれ」とできる。 6承認どころか1承認を待つのも大変なので、ネットワークにトランザクションが流れたら本を渡してしまって良いと思う。 たしか、ビットコインのノードは二重支払いになるようなトランザクションが流れてくると、2個目のほうは拒否するようになっているのがデフォルトなので、実際に二重支払いをするのはなかなか大変そう。 トランザクションが溢れるようになったら、手数料0で支払って、ネットワークから消えるのを待つという手はあるかも。

モナーコイン

モナコインちゃんbotを使うのが一番手軽だと思う。 支払う人が事前にモナコインちゃんbotモナーコインを送っておく必要があるけれど、モナーコインを日常的に使っている人なら、たいてい預けているでしょう。

外貨

外貨が好きで、海外に行ったときにはなるべくコンプしようとしているので、外貨でもOKと書いておいた。

結果

クレジットカードを使った人が1人。 その他は0。 もっと言うと、1万円札、5千円札、500円玉もそれぞれ1人ずつ。 他は全員が千円札だった。 「お釣りを準備しておけ」という話を聞くので、千円札を50枚持っていったけれど、手を付ける必要が無かった。 クレジットカードを使った人がいたから、Squareリーダーが無駄にならなくて良かった。

同じように色々な支払い手段を用意している人が来て話したが、やはりクレジットカードを使う人がたまにいるくらいで、他は全く使われないらしいw (「買いに来てくれ」と言われたけど、結局行かなくてすみません)

当日

外に並んでいる人たちを横目に、すっと入れる。 開場前はビックサイトの人口密度が低い。 サークルチケットすごい。

PO.SU.TAというポスタースタンドの評判が良いので買おうと思ったけど、買おうとしたときにはもう遅かった。 次に出展するときには買おう。 コミケ側で1,000円で貸してくれるというので借りた。 これ↓の後ろのやつ。

ブックスタンドと値札は100円ショップで買った。 値札は良いのだけど、ブックスタンドがすぐに外れるので、見本誌を取ろうとした人が慌てて申し訳なかった。 民法第486条に金を払った人は領収書を請求できると書かれているので、いちおう領収書も買ったが、一切要求されなかった。

動画を流そうと思って、iPad miniを持っていった。 すぐに画面が消えるしループ再生はできないしで諦めた。 動画を普通に開いてもループの設定項目は無いが、アルバムを作ってスライドショーならループ再生できたらしい。 そんなの分かるか。

犯罪収益移転防止法の本人確認

明日のコミケの東た26-bでこの本を頒布します。

f:id:kusano_k:20170810040428p:plain:w320

http://sanya.sweetduet.info/ksnctfc92/

支払い方法として、モナーコインも受け付けることにした。 他人から支払ってもらう前に自分で試したかったけど、モナーコインは1 MONAも持っていないので、bitbankで買おうとした。 土曜日にアカウントを作って本人確認書類として免許証の写真を送った。月曜日にbitbankから住所確認用の書類が発送されて、火曜日に簡易書留受け取り、特にメールなどは来なかったけど水曜日には入出金ができるようになっていた。 休日を除けば最短。速い。

余所でこのような本人確認をしたときには、届いた書類に書かれていたコードをサイト上で入力するとか、本人限定受取郵便で配達員に身分証明書を確認されるとかだった。 bitbankから届いた書類を見ると、「口座開設申込みありがとう。1営業日程度で口座を有効化するからちょっと待ってね」と書かれているだけ。 おや?と思ったけど、なるほど、簡易書留なら差出人は受け取られたことが分かるから、受け取るだけで充分なのか。

と納得しかけたものの、これだと私以外の誰かが私の免許証のコピーで口座開設を申し込んで、私が書類を受け取って放置していたら私名義の口座ができてしまう。 本人確認のために免許証のコピーを渡すのは良くあることなので、「信用できない相手に免許証のコピーを渡すな」と言われても無理がある。 「ハンコを押して受け取った書類を放置するな」と言われれば、まあ、それはそうなのだが……。 架空請求では、公的機関から届いた書類以外は全て無視して連絡はするな、と言われている。 どのような書類なら無視して、どのような書類なら対応するべきなのかというのが、なかなか難しい。

そもそも、本人確認をするメリットがbitbankには無い。 金を貸すわけではなく、預かる側なので、誰がアカウントを作っていようが金さえ振り込んでくれるなら構わないはず。 なぜ、本人確認をしているのかというと法律で決まっているから。

改正犯罪による収益の移転防止に関する法律が4月1日に施行され(たはずだけど反映されていない……)、特定事業者に仮想通貨交換業者が含められた。 第四条で、特定事業者は顧客の住所などを確認することが義務づけされている。 確認の方法が犯罪による収益の移転防止に関する法律施行規則の第六条に定められていて、

ホ 当該顧客等又はその代表者等から当該顧客等の本人確認書類のうち次条第一号若しくは第四号に定めるもの又はその写しの送付を受けて(略)当該本人確認書類又はその写しに記載されている当該顧客等の住居に宛てて、取引関係文書を書留郵便等により、転送不要郵便物等として送付する方法

とのこと。 「取引関係文書」は上のほうに「預金通帳その他の当該顧客等との取引に係る文書(以下「取引関係文書」という。)」と書かれている。 預金通帳と並べられていることからして、それが無ければ取引ができないというレベルのものである必要がありそう。

ググっていたら、日本証券業協会Q&Aが出てきた。

55 「取引関係文書」の範囲

Q 施行規則第5条第1項第1号ロ等において規定されている「取引関係文書」には、例えば、口座開設のお礼状も含まれるのか。

A 口座開設のお礼状も「取引関係文書」に含まれる。

実はわりと何でも良いらしい。 協会が勝手にそんな判断もできないだろうから、お上に確認したんじゃなかろうか。

ということで、bitbankの方法でも問題は無いと。 bitbankのためでも顧客のためでもない法律なのだから、必要以上にbitbankが手間を掛ける義理は無い。 まあ、放置して勝手に口座を作られても、警察が家に来て「お前の口座で黒い金が動いていたぞ」と言われたときに「知らんがな」と言えば良いだけなので、特に不利益をこうむることも無いんじゃなかろうか。

DNA親子鑑定と遺伝子診断の結果を晒すことについて

このツイートを見て、

こうツイートしたら、「DNAの複製にはエラーがあるからハッシュでは無理」「そもそも交叉があるのでは」と言われた。そもそも、DNAでの親子鑑定が何を調べているのかも知らなかったので、整理する。DNAを秘匿したまま親子関係を証明する方法はあるのだろうか?

参考文献

http://www.rocus.co.jp/faq/faq.htm

DNA親子鑑定をしている会社のFAQ。値段とか「裁判でも使えます」とかのアピールはどこの会社も書いているけど、原理などがあまり書かれていない。このサイトには詳しく書かれていた。

以前に買った本。書名と表紙を見て、簡単に書かれている薄い本かと思いきや、けっこう厚いし詳しく書かれていた。オススメ。

DNA親子鑑定の原理

人間の細胞の中には46本のDNA(≒染色体)があって、2本ずつ対になっている。この「対になっている」というのは、DNAが二本鎖の螺旋というのとはまた別。DNAの二本鎖はAとT、GとCが対になると決まっているので、情報量は無いし、この先の話にも関係が無い。精子卵子は、この対になった染色体のどちらか一方のみを持っている。子供は両親の染色体を1本ずつ持っているので、そのことを確認すれば、親子鑑定ができる。

他方の親の親子関係が確定していて、そのDNAも使えると、精度があがるらしい。面白い。

DNA親子鑑定で調べているもの

10年前くらいに、「ヒトのDNAの全ての塩基配列の解析ができた」と話題になった。その頃ならばもの凄いコストが掛かっただろうけど、今は20万円くらいでできるらしい。

http://gene-nex.com/

とはいえ、それでも全塩基配列は高い。Wikipediaによると、STR(Short tandem repeat)という部分を調べるとのこと。DNAの中には同じ塩基配列が何度も繰り返される部分が多くあって、この繰り返し数は(数千年、数万年というスケールでは)比較的変化しやすい。変化しやすいといっても、人類全体で数十種類という程度。Wikipediaの「アリル」というのが染色体1本分。12種類の中から順番を無視して2個選ぶ場合の数は、たしかに78種類になる。ここで例に書かれている数字が繰り返し数だろうか?

DNA中のある塩基配列から別の塩基配列までの長さを調べるというのは、PCR法で簡単にできる。そういえば、大学の一般教養の実験にあった。調べたいDNAと、調べたい部分の両端の塩基配列を持ったDNAを溶液に入れて、熱したり冷ましたりを繰り返すと、調べたい部分だけが大量に複製される。あとはこれをゼリーの端入れて電気泳動すると、長さに対応した部分にバンドが見える。

DNAを非公開にした親子鑑定

既存のDNA親子鑑定に乗っかるならば、結局何ができれば良いかというと、「各人はDNAの場所ごとに数十種類のパターンの中から2個のパターンを持っている。親と思われる人と、子と思われる人で、2個のパターンが1個も共通していない場所が少なくとも1個はあるか?」という問いに答えること。何か上手いアルゴリズムはあるだろうか?

2個のパターンは順不同でしか得られない。各染色体はランダムに選ばれるし、たとえ同じ染色体であっても、交叉によって途中で入れ替わることはわりと頻繁にあるらしい。なので、私がツイートしたような方法は使えない。

Wikipediaの「組み合わせ50億通り」というのは、親子鑑定の精度としては充分かもしれないが、ハッシュの逆算に耐えるには少なすぎるので、ハッシュみたいな方法で非公開を担保するなら、調べる場所は増やす必要がありそう。

この調べている部分はたぶん遺伝子ではないので、そもそも公開しても体質や遺伝病がバレる不利益は無いのではと思ったけど、全く別の場所で採取されたDNAが自分のものかどうかを調べることに流用されたり、今回の親子鑑定とは別の親子鑑定に勝手に使われたりというリスクがあるのかもしれない。これらのリスクを考えると、ハッシュ化のような方法はそもそもダメそう。

親子鑑定において、DNAの複製エラーは全く考慮されないらしい。どこのサイトを見ても「親子であることは99%以上などの確率的に分かります。親子でないということは確実に分かります」と書いてある。DNAが子供に伝わるときに書き換わることを考慮しているならば、こういう書き方にはならない。DNAには様々な修正機能もあって、エラーは驚異的に低く抑えられている。1塩基あたり、10-10から10-11程度とのこと。たしかに、DNAの一部だけを見るなら無視できるほどに小さい。

親子鑑定をする人と、親子鑑定の結果を知りたい人の両方が信頼できる診断会社があるならば、「終わったら全部廃棄して」と言ってその会社に任せれば良いだけなので、実際にはそれぞれが別の会社に何かを依頼するはず。そのような状況だとそもそも相手が嘘を吐く可能性も考えないといけない。

実際にこれで何かをしようとしているわけではなくて、単なる思考実験なので、前提条件は何でも良いけど、何か暗号論的に面白い話はできるだろうか?

遺伝子診断

以前にMYCODEの遺伝子診断を受けたことがある。MYCODEの場合は病気のなりやすさや体質ごとに、その判断に使用した塩基が見られる。

f:id:kusano_k:20170320001540p:plain

※HTMLを書き換えて、乱数で決めた場所を「あなたの遺伝子型」にしたので、私の結果ではない(かもしれないし、私の結果かもしれない)。

これ、そのまま親子鑑定に使えそうだ。2個並んでいる塩基が、染色体対それぞれの塩基だと思う。「体脂肪率が○○なタイプです」からの逆算も当然できるはず。遺伝子診断結果を公開することのリスクとして、保険を断られたり会社をクビになったりということが良く言われるが、勝手に親子診断をされてしまうというリスクのほうが大きそう。MYCODEの場合は、「あなたは○○癌に日本人の平均より2倍なりやすい」程度で、遺伝子疾患などは調べていないので、前者のリスクはそんなに無さそう。

MYCODEの結果をそのまま他人に見せる人はいないだろうけど、「MYCODEを受けたら、体脂肪率が○○と言われた」くらいならうっかり言ってしまいそう。家族間でそんな話をしていると……((((((;゚Д゚))))))

BugBounty.jpの紹介

脆弱性"&'<<>\ Advent Calendar 2016の25日目の記事です。

https://bugbounty.jp/

脆弱性が金に変わる。すばらしい。

BugBounty.jpとは

スプラウト株式会社が運営する日本のバグ報奨金プラットフォーム。 海外だとHackerOneが有名。 プラットフォームなので、脆弱性を探される会社側は自分で報告フォームなどを用意する必要が無いし、探す側はどこの会社でも同じように報告できて楽。

報奨金をもらうまでの流れ

簡単。面倒な作業は無い。

ユーザー登録をして、

f:id:kusano_k:20161225181704p:plain:w480

募集中のプログラムの中から脆弱性を探す。 プログラムによって、対象となるドメインなどが決まっている。 見つけたら報告。 書くのは、名称(たぶん何でも良い)、種類、URL、内容だけ。 IPAに報告するよりも項目が少ない。

f:id:kusano_k:20161225181851p:plain:w480

脆弱性として認定されると、支払い情報が登録していない場合は「登録しろ」と言われるので、登録。海外の銀行口座でもpaypalでも良いらしい。

f:id:kusano_k:20161225182137p:plain:w480

あとは待っていれば、認定された翌月の末に口座に報奨金が振り込まれる💰

利点

日本製ということ。

ユーザー登録から報奨金の受け取りまで、日本語だけで完結する。 脆弱性の報告も日本語でOK。

英語は得意な人ならば問題無いのだろうけど、海外からの金が振り込まれると銀行に手数料が取られる。 BugBounty.jpならば国内送金なのでその心配も無い。

Chrome Toolboxの脆弱性を見つけてGoogleから1000ドルもらった - kusano_kの日記

海外の人たちにあまり目を付けられていないので、ライバルが少ないというのも脆弱性を探す側にとってはメリット。 世界中の脆弱性を探す人たちに突っつかれまくったらとても残っていないような簡単な脆弱性があっさり見つかることもある。 BugBounty.jpは英語にも対応していて、海外のハッカーも参加することをアピールしているし、ランキングを見ると半分くらいは海外の人だけど。

欠点

参加している会社が少ない。増えてくれ🙏

修正完了後も脆弱性の内容を口外できない。 脆弱性"&'<<>\ Advent Calendarにあるような、「こんな脆弱性を報告して報奨金をもらった」という記事を書くことができない。

自分で発見したバグは自由に公開していいですか? 当サイトを通じて報告された情報の開示は一切禁止しております。詳しくは利用規約をご確認ください。

https://bugbounty.jp/faq

修正後に話題にしたいような面白い脆弱性だったら、BugBounty.jpを通さずに報告した方が良いのかもしれない(私は金に目がくらんでいるので、そうしたことはないけど)。 修正完了後か、修正完了後一定期間が経過したら、開示できるようにしほしいけれど、そうすると参加しようという企業が減ってしまうのかもしれない。

税金

報奨金の源泉徴収などはされないので、自分で税金を払う必要がある。 たぶん、一時所得かなぁ。 1年間で50万円を超えると課税対象。 20万円を超えたら、新たに税金が発生しなくても、確定申告が必要? 間違っていてマルサが来ても知りません。

探すコツ

そこまでしっかりしたサイトばかりというわけではないので、入力値をちょこちょこ弄っているだけで見つかることもある。

報奨金をもらえるのは最初に見つけた人だけなので、速さが重要。 発見された脆弱性がすぐに修正されるとは限らないので、せっかく見つけた脆弱性を報告してみたら、すでに他の人が報告していたということもありえる。 また、募集期間終了前でも、報告が多いと受付が一旦停止されることがある。 今はNETSEAがその状態。募集開始後2日で停止した。

2016/12/08 一時レポートの受付を停止いたします。 現在までに報告されたレポートについて精査が終了し次第、再開いたします。

https://bugbounty.jp/program/78b209154a40aa8b7d472836

ライバルが増えるのであまり言いたくないが、Twitter@BugBounty_jpをフォローするのがオススメ。 新たに募集を開始した会社があるとツイートされる。

そもそも脆弱性が無いサイトの脆弱性をいくら探しても無駄。 サイトによってセキュアさが異なるはずなので、「このサイトは作りが甘いな」と感じたら、そこをしつこく探すのが良いと思う。