【登壇レポ】Qiita Conference2022 「ハッカー入門:公開鍵で学ぶ、ものごとの裏側を考える技術」by ゆめみ★ルーク
水星がマーキュリー!はい!ギュンばんわ!
ゆめみ広報担当の福太郎(@fukutaro_yumemi)です!
ソフトウェア開発に関わる人々の新たなきっかけを生み出す場として、2022年6月23日に開催された「Qiita Conference2022」に、ゆめみのエンジニアであり取締役でもあるルークが登壇しました!
なかなかのインパクトを与えた内容ってこともあり、そのレポートをお届けします(^^)
登壇者プロフィール
ハッカーってなんだろう?
かっこいい技術や、ダーク、憧れ、パソコンでなんでもできてしまう人。
そんなイメージをお持ちではないでしょうか?
今回は、知識の深め方の一例を見ながら具体的な調べ方、マインドセットを発表していきます。
ハッカーとは[検索]
How to Become aHacker(ハッカーになろう)という一番有名なサイトが出てきました。
イイ感じですね、順番に見ていきましょう。
心構えのうち技術に関することは、最後の「心構えは技術の代用にならない」だけですね。精神や心構えがよくても個人の技術力がなければ説得力も何もない、結局「技術を身に着けていくことがハッカーなんだ」と言われているような気がして興味深いですね。
だからこのサイトの後半部分は、技術はこういうものを身に着けていきましょうという内容が書かれています。
ただ、技術は身に着けたとしてもその先に何をすればいいのかを知らないと、困るんじゃないかなと思いましたので、そのハッカーの考えを自分の体験をもって解説していきたいと思います。
公開鍵暗号方式
今日は1ハッカーとして初めて公開鍵に触れるという風にお話ししていきます。
まず、ひとつずつステップを整理してみましょう。
考えてみる・・・パスワードみたいな?情報を守るもの?公開していいの?
整理してみる・・HTTPSやSSHで使ったような。裏技みたいな技術。南京錠とか?
調べてみる・・・Qiitaで調べてみた。3種類の方式「暗号化」「デジタル署名」「鍵交換」
触ってみる・・・opensslツールを使って操作してみる。
弄ってみる・・・デバックプレイ。普段は見なくてもいいところを見てみる。
利用先を考る・・想像→検索→発見→想像→検索→学習と繰り返すのがハッカー思考
問題を探す・・・公開鍵が盗まれても大丈夫。じゃあ仲介されても大丈夫なのか?
3種類の方式「暗号化」「デジタル署名」「鍵交換」
3種類の実装のうち、対応してるものとしてないものがある。
RSAは全部に対応しているので、これを見ていきます。
この2人を仮に、アリスさんとボブさんにしましょう。
アリスさんは2つの素数を持っていてpと q です。
この2つの素数を掛け合わせた数nと素数p q から、ある操作をして得られる数dとeを用意します。
このうち掛け合わせた数nと、もうひとつeを「公開鍵」としてボブさんに送ります。
このときnとeとdの三種類の数を使って得られるnとe、nとdの二つのペアができます。
これを使ってある操作をして作られる数はもう片方のペアでしか元に戻せないっていうような数を作ることができることがわかっています。
この性質を使ってボブさんが nと eを使って数を作ると、nとdを持っているアリスさんしか元に戻せない、これが「暗号化」にあたります。
そしてnとdを持つアリスさんが同じ操作で数を作ると、今度は nとeを持っているボブさんをはじめとする全ての人は「アリスさん以外はこの数は作れないんだ」ということがわかるため、これは「デジタル署名」として機能します。
また、共通鍵つまりパスワードのようなものを暗号化してアリスさんに送れば、アリスさん以外にパスワード知られることなく安心できます。
これが「鍵交換」になります。
つまり、 RSA 暗号は素数1つから見出されて3種類の数を作ったアルゴリズムで「暗号化」「デジタル署名」「鍵交換」その3つの機能を全て達成しています。
仮に第三者 C さんが nと e を盗み出すとしましょう。
C さんはこれを使って悪いことをしようとしている。
アリスさんになりすまそうとか、ボブさんの秘密のメッセージを読んでしまおうとか、でもこれは失敗してしまいます。
なぜかというと、もう片方の部屋に含まれるn,eと対になるdという数が必要なんですが、これは素数のp,qがないとわかりません。
大きな数の因数分解が難しいので、nから p,qを復元することができないため小さな企みはここで頓挫してしまう。
これがRSA公開鍵の概要になっています。
これらを総合するとこのようなことがわかりました。
・公開鍵には署名、鍵交換、暗号化の3種類
・暗号化だけだと思ってたものはその中の一部
・HTTPS、SSHで使われてる
・公開鍵と秘密鍵の2つを組み合わせて使う
・公開鍵はみんなに見せるけど、秘密鍵は秘密にする
・RSAという方式はでかい素数を2つ使っているらしい
opensslを使って操作してみる
デバッグプレイの感覚で深いところまで弄ってみる
素数を探すことをミッションにしてみましょう。
やみくもに探しても素数の場所はわからないので、ファイルの形式を調べるために、中身のうち読み取れる「BEGIN RSA」の部分を検索にかけてみます。
▼わかったこと
RSA鍵、証明書のファイルフォーマットについて
・PEMというフォーマットということ
・ASN.1という、JSONみたいにデータをシリアライズできる方式の書き出しの方法の一つ
データを取り出すことができれば中の構造がわかる。
鍵の中身を表示することができる。
「prime1」と「prime2」という、明らかにそれっぽいデータが入っていました。
素数についての内容が入っているのがわかりました。
これを10進数に直してみます。
これを素数になっているか確かめてみました。
「~is a prime」になっています。
本当に入っていたんですね。
公開鍵の中身を確かめるために、素数を二つ欠け合わせてみます。
本当に「prime1」と「prime2」を掛け合わせたものがあり、ぴったり一致して実際に手元で確認ができます。
公開鍵が身近に感じることができたのではないでしょうか。
こういうことも、試してみるのもいいと思います。
利用先を考えてみる
・先人の軌跡
・同じ問題を二度と解くのは嫌だ
・利用先を想像する
・実際の利用先を探ってみること
・デジタル署名→SSH
・想像→検索→発見→想像→検索→学習・・・
問題を探してみる
・RSA特有の問題
・nからp,qに戻せない→これは本当に安全なのか?
安全ではないかもしれない。
量子コンピュータを使えば、nからp,qを取り出せるかもしれない。
現状しばらくは安全とのことですが、発展すれば未来には取り出せるかもしれないと書いてありました。
量子耐性をもつもの、TLSポスト量子暗号などもあります。
・公開鍵を盗まれても大丈夫。
・じゃあ、仲介されても大丈夫なのか?
仲介とは具体的には、Cさんがp,qをアリスさんが作ったものだと嘘をついてボブさんに送ってしまう。
これを回避させるためには、直接合って試す原始的な方法しかない。→中間者攻撃
現実的には難しいので、二つ方法を紹介します。
Web of Trust
誰かが他のところでした握手を信頼する。
友達のお墨付きを間接的に信頼して、個人で信頼モデルを気づくためハードルが高い。
公開鍵認証基盤・認証局
特定の誰かが信頼したものを信頼するという内容になっています。
まとめ
実は、今日実施した「調べる」ということがハッカーの心構えの基本となっていると思います。
ゆめみは、ハッカーにとって夢のような空間となっています。
みんなが知っているあのサービスのクライアント課題を技術を使って解決していく環境です。
そして、全員CEO制度などユニークな制度があります。
技術者に馴染みのある表現だと「メンバー全員に権限が付与されているサーバー」のような、改善したいと思ったときにひとりひとりが改善できます。周りのメンバーが積極的にサポートしてくれるので安全なのです。
僕は、開発者の他に取締役というポジションでゆめみの会社をハッキングするということもやっています。
働くということで世の中の歪みをなくしていこうという会社です。
興味があれば、ぜひ一緒に働きましょう!
▼資料はこちらでご覧になれます(^^)
ご視聴いただいたみなさん、関係者のみなさん、ゆめみを応援してくれるみなさん、このたびはありがとうございました~(^^)
感謝!ギュン謝!