はてなキーワード: RSA暗号とは
2. モジュラスの計算: N = p * q
3. オイラーのトーシェント関数: φ(N) = (p-1)(q-1) を計算する。
4. 公開鍵と秘密鍵の生成: 公開鍵は (N, e) であり、e は gcd(e, φ(N)) = 1 を満たす整数である。秘密鍵は d であり、d * e ≡ 1 (mod φ(N)) を満たす。
RSA暗号の安全性は、合成数 N の素因数分解が計算的に困難であることに依存している。具体的には、次の問題が考えられる:
N = p * q
ショアのアルゴリズムは、量子コンピュータ上で動作する効率的な素因数分解アルゴリズムである。以下にその主要なステップを示す。
任意の整数 a を選択し、N に対して次の条件を満たすことを確認する:
整数 a の順序 r を求める。順序とは、次の条件を満たす最小の整数である:
a^r ≡ 1 (mod N)
量子フーリエ変換は、状態ベクトルを重ね合わせて次のように表現される:
|x⟩ = Σ(k=0 to N-1) |k⟩
ここで、量子フーリエ変換を適用することで周期性に関する情報が得られる。具体的には、
QFT |x⟩ = (1/√N) Σ(j=0 to N-1) Σ(k=0 to N-1) e^(2πi jk / N) |j⟩
得られた状態から測定を行うことで周期情報が得られる。この周期情報を用いて次の式を考える:
x = a^(r/2) - 1
y = a^(r/2) + 1
これらが非自明な因子である場合、p と q を次のように計算できる:
p = gcd(x, N)
q = gcd(y, N)
ショアのアルゴリズムは確率的であり、成功率は高いものの100%ではない。そのため、誤り訂正技術や複数回実行することで成功確率を向上させる必要がある。
楕円曲線暗号(Elliptic Curve Cryptography, ECC)は、数論と代数幾何学に基づく公開鍵暗号方式である。
特に有限体上の楕円曲線の構造を利用して安全性を確保する手法として知られ、RSA暗号に比べて少ないビット数で同等の安全性を実現できる。
楕円曲線とは、一般的に次の形で表される三次方程式により定義される:
y² = x³ + ax + b
ここで、係数 a, b は、定義する体 F 上の元である。特に、上記の式が体 F 上で非退化(特異点が存在しない)であるためには、判別式がゼロでないこと、すなわち
4a³ + 27b² ≠ 0
楕円曲線上の点の集合 E(F) は、無限遠点 O を加えた集合として群構造を持ち、加法演算が定義できる。加法演算は、点の「和」を取る操作であり、次の規則に従う:
このように、楕円曲線上の点の集合はアーベル群となる。この群の構造を活用し、暗号方式が構築される。
実際の暗号応用では、有限体 Fₚ(p は素数)や拡大体 F₂ᵐ 上の楕円曲線を使用する。有限体上の楕円曲線 E(Fₚ) は有限個の点から構成され、その数は次のようにハッセの定理によって評価される:
|E(Fₚ)| = p + 1 - t,
ただし、トレース t は |t| ≤ 2√p を満たす。
ECCの代表的な応用として、楕円曲線上のディフィー・ヘルマン鍵共有(ECDH)がある。これを次のように構成する:
1. 楕円曲線 E と基点 G ∈ E(Fₚ) を公開する。
2. ユーザーAは秘密鍵 a を選び、公開鍵として P_A = aG を計算して送信する。
3. ユーザーBは秘密鍵 b を選び、公開鍵として P_B = bG を計算して送信する。
4. 双方は共通鍵として K = aP_B = bP_A = abG を計算する。
この手法の安全性は、離散対数問題、特に「楕円曲線離散対数問題(ECDLP)」に依存している。楕円曲線上の点 P と Q = nP が与えられたとき、係数 n を求めるのは計算的に難しいため、敵対者が秘密鍵を推測するのが困難である。
例えば、リーマン予想の特別な場合であるヴェイユ予想は、有限体上の楕円曲線の点の数に対する評価を与え、暗号設計の基礎となっている。
さらに、現代の暗号学では楕円曲線とモジュラー形式の関係やガロア表現といった高度な数論的構造が研究されており、これらが量子耐性を持つ新たな暗号方式の研究に貢献している。
楕円曲線暗号はこのようにして、抽象代数学、数論、代数幾何学の融合によって成り立ち、安全性と効率を両立させた暗号技術として広く利用されている。
RSA暗号は、代数的構造、特に合同算術および整数環における準同型写像を用いた公開鍵暗号である。
RSAの安全性は、環の自己同型写像の一方向性と、有限生成群の元の分解が困難であることに基づいている。
この暗号方式は整数環 Z/NZ(N = p・q)上の準同型写像の一方向性を活用する。
まず、RSAにおける鍵生成は、代数的に以下のように構築される:
互いに素な大きな素数 p および q を選び、合成数 N = p・q を作成する。
これにより、商環 Z/NZ が定義される。ここで、N はRSAにおける「モジュラス」として機能する。
この商環は、全体として単位的な環であり、RSA暗号の計算基盤となる。
オイラーのトーシェント関数 φ(N) を次のように計算する:
φ(N) = (p - 1)(q - 1)
これは環 Z/NZ の単数群 (Z/NZ)* の位数を表し、RSAの準同型構造における指数の計算に用いられる。
単数群 (Z/NZ)* は、φ(N) を位数とする巡回群であり、一般に生成元 g ∈ (Z/NZ)* を持つ。
RSAでは、この群の生成元から得られる公開指数 e は、φ(N) と互いに素な整数として選ばれる。公開指数 e はRSAの「公開鍵指数」となる。
e・d ≡ 1 (mod φ(N))
これは、e に対する逆元 d の存在を保証し、秘密指数として機能する。ここで d はユークリッド互除法により効率的に求められる。
以上により、公開鍵 (N, e) と秘密鍵 (N, d) が生成される。これらの鍵は、合同算術と商環上の準同型写像によって定義される。
RSA暗号は、モジュラー演算によるべき乗写像を使用した暗号化および復号過程である。この操作は、(Z/NZ)* 上の自己同型写像に基づいている。
任意のメッセージ M ∈ Z/NZ に対し、公開鍵 (N, e) を用いて次の準同型写像を作用させる:
C = σ(M) = M^e (mod N)
ここで σ: M → M^e は (Z/NZ)* の自己同型写像として作用し、得られた C は暗号文となる。
この写像はモジュラ指数写像として同型写像であるが、一方向的であるため暗号化に適している。
暗号文 C を受け取った受信者は、秘密指数 d を用いて復号を行う。具体的には次のように計算する:
M = C^d (mod N) = (M^e)^d (mod N) = M^(e・d) (mod N)
ここで e・d ≡ 1 (mod φ(N)) であるため、e・d = kφ(N) + 1(整数 k)と表すことができ、したがって
M^(e・d) = M^(kφ(N) + 1) = (M^(φ(N)))^k・M ≡ 1^k・M ≡ M (mod N)
により、元のメッセージ M を復元することができる。ここでオイラーの定理に基づき、(M^(φ(N))) ≡ 1 (mod N) が成り立つため、この復号化が成立する。
RSA暗号は、Z/NZ の構成において N = p・q の因数分解が困難であることを仮定する。
合成数 N の素因数分解問題は、現在の計算アルゴリズムにおいて指数時間に近い計算量が必要であり、代数的には解読が非常に難しい問題であるとされる。
RSA暗号における暗号化は群の自己同型写像によって構成されるが、逆写像を求めることは一般に困難である。
これはRSAの一方向性を保証し、現実的に解読不可能な構造を形成している。
RSA暗号の解読は逆写像としてのべき乗の逆操作を計算することに相当し、これを効率的に解決する手段が存在しないことが安全性の根拠となる。
RSA暗号の構造は合同算術に基づく準同型性を有し、M → M^e (mod N) というモジュラ指数写像によりメッセージ空間上の一対一対応を実現する。
この準同型性により計算効率が保証されつつも一方向性を持ち、安全な暗号化が可能である。
以上より、RSA暗号は合同算術、準同型写像、群の生成元と逆元の難解さに基づく暗号であり計算量理論と抽象代数からその安全性が保証されている。
RSA暗号の解読可能性は準同型写像の逆像を効率的に求める方法が存在しないことに基づいており数学的にはこの逆像問題の困難性がRSA安全性を支えているといえる。
アメリカがクリプト規制に本気出し始めたので本邦Web3ヤーたちがざわざわしています。さらなる詐欺の撲滅のため、彼らが常用するレトリックとそれに対する正しい反応をあらかじめ書き連ねました。これらが有耶無耶のまま来年ビットコインが半減期を迎え、万が一雰囲気で相場が好転すると、耳さわりの良いポジトークが増えていくでしょう。これ以上被害者を出さないためにWeb3ヤーワクチンを打ってください。
解答「あなたが損した分、ショートしている人は儲かっています。あなたのポジションはSECも守ってくれません。そもそもトークン自体に価値があるなら、その価格がドル建てで上がろうか下がろうか関係無いはずです。それなのに価格の上下で一喜一憂するということは、そのトークン自体に価値がなく、ドルに価値があると自ら告白しているようなものです。そんなトークン遊びは規制されて当然でしょう。」
解答「むしろ考えるべきなのは、そんなゲンスラーでもこうなってしまうほどアメリカはクリプト規制に本気を出していることです。ゲンスラーすらSEC相手には犬なのです。個人攻撃で国がひっくり返るほど、アメリカは中央集権的な国家ではありません。もっと大きな敵を相手にしましょう。それを突き詰めていくと、規制がないことを良いことに、資金洗浄やテロ資金供与に目を瞑り、いい加減なポンジスキームを乱立させて、マネーゲームに狂乱したあなた方が本当の敵だったことを発見するでしょう。」
解答「クリプトはイノベーションだったのでしょうか。イノベーションは誰かの役に立つからイノベーションなのです。金融ゲームに勝ってドルを誰かから奪える以外のユースケースを挙げてください。」
※別解「暗号資産はそもそも国家に依存しない通貨というコンセプトのもと発明されました。その暗号資産は、国家に保護されるべきものなのでしょうか。国家からの保護が必要なら、その挑戦に失敗した、ただそれだけではないでしょうか。」
解答「あなた方の間違いを認めたくがないために、無理やり陰謀論で帳尻合わせですか。本当に失望しました。試しにアメリカのTwitterトレンドを見てみましょう。誰もクリプトのことなんか話していませんし、見つかるのはbotterによる詐欺ミームコインのエアドロップの告知ツイートだけです。これを見るだけでもクリプトは百害あって一利なしだと分かるでしょう。あなた方のようなルサンチマンに陥ったイノベーターに誰がついていくのでしょうか。あ、イノベーターではないか。そーか、そーか。」
「ふぁっっ?」
解答「DeFiは金融リテラシーが低い人には向きません。スキャムやポンジスキームのプロジェクトに溢れているからです。金融インフラが進んでいない地域では金融教育も行き届いていないことを想定すると、そのような地域の人々が安心して触れるものでは決してありません。途端に泣き崩れる嫁が大量発生するでしょう。」
※別解「え、DeFiって、金融強いマンたちが、余裕資金で脳汁ブシャーに興じるオンラインカジノじゃないんすか?途上国の人から見ればDeFiの手数料だけで一ヶ月暮らせるけど?」
解答「みんなそう言ってるから信じられません。そもそも、その断り文句を入れなければならないあなた方のその業界は、何かが根本的に間違っています。」
解答「そのコミュニティに運営が成り済ますことが技術的に簡単にできる以上、我々投資家はあなた方を信頼しなければなりません。そんなあなた方が発行するトークンを証券と呼ばずに何と呼べばいいのでしょうか?」
解答「プロダクトの素晴らしさではなくて、エアドロップで集客しなければいけないプロダクトのバリューは何ですか?エアドロップが自己目的化してませんか?」
解答「エアドロップで客引きするのがダサいと分かっているから、未定で誤魔化しているのでしょう。こう言うプロジェクトからはエアドロップしたい下心が透けて見えます。いずれVCに突かれてエアドロップするでしょう。」
解答「真面目なプロダクトはこの業界では報われません。触っても無駄なので無視しましょう。」
解答「エアドロップができない日本のプロジェクトが取る日本特有のマーケ戦略です。基本ミントしても何にも起こりません。くだらない電子ゴミにしゃぶりついた黒歴史がブロックチェーン上で全世界に晒されるだけです。絶対にやめましょう。」
解答「今までハッキングされたプロジェクトもそう言ってきました。それでも大丈夫と言える根拠を述べてください。」
※別解「そんな定型句は聞き飽きたので、あなたのチームに朝鮮訛りかロシア訛りの英語を喋って、リモート会議で顔見せない開発者がいないかだけまず教えていただけますか?」
解答「それは仮想通貨取引所が全世界的にAML/CFT対策を強化してきた努力の成果です。現在の暗号資産はハッキングしても大規模な資金洗浄が困難になっています。規制の恩恵に守られながら、Web3ウェーイ、政府なんていらねーぜウェーイ、とイキるのは恥ずかしいのでやめましょう。」
解答「ハッカソンはWeb3業社の主要事業です。自社エンジニアに去られ、プロダクトのネタが切れ、エアドロップもしてしまったWeb3業社はやる事がありません。何かやっているアピールのために、ハッカソンを頻繁に開催して事業を偽装しています。そんなハッカソン会場には、闇バイト戦士をリクルーティングしようと怪しい人がウヨウヨしています。気をつけましょう。」
解答「イベントもハッカソンに次ぐ事業です。英語で何かを聞かされますが何も中身はありません。ポジショントークと馴れ合い、プロ驚き屋たちのサクラトークだけです。分かりやすい英語で話してくれるので、いいリスニングの練習になります。また、会場にいるWeb3女子の9割はバックに怖い人たちがいます。近づいてはいけません。」
解答「組織内部が崩壊していますと同義です。Web3の中の人はとっくにヤバさに気づいて逃げています。特にエアドロップを終えたプロジェクトは新規で入る人には何の旨味もありません。また、トークンをもらえても、証券認定されれば、むしろトークンを持つことで面倒なことに巻き込まれる可能性があります。関わらずが正解です。」
解答「Web3起業家ワナビーが取りがちな行動です。しかし、そういった仲間意識から生まれる信頼関係の重み付きグラフから権威が創発され、権威が国家権力を生み出し、やがて私有財産権を脅かすに至ったアンチテーゼとして暗号資産は生み出されたはずです。ドバイやシンガポールの村社会は楽しいですか?仲間と内輪ノリで楽しくやっててください。政治家と写真撮って、偉い人と握手して、セルフブランディングして、素晴らしいプロダクトを世に送り出してください。待ってます。」
解答「さぞ難しそうなことをしている響きですが、JavaScriptしか書けない弱々エンジニアです。ブロックチェーンのAPIを呼んだり、ウォレットのAPIを呼んだりすることしかできません。楕円曲線暗号は知っているのにRSA暗号は知りませんし、デーモンは知っているのにプロセスは知りません。トランザクションと聞けばブロックチェーンのトランザクションが先に思い付きます。もちろんSQLは知りません。それなのに自分が何かクールなことをしていると勘違いしています。え、Solidityも書ける?ああ、自分がクールじゃないと気付いたから周りのエンジニアとの差別化を図ったんだよね。わかるよ。でも、小手先で見栄えだけよくする様は、Web3起業家ワナビーとマインドが一致しています。頑張ってください。」
解答「〇〇チェーンが高いTPSを記録しているのは、分散性を犠牲にしているからです。ブロックチェーンとは呼べません。どこかに単一障害点があるので不安定でよく止まります。分散していないので、ゲンスラーの手にかかれば瞬殺されるでしょう。」
※別解「高スループットなのはいいけど、その分増えるデータ容量はどうすんの?将来的に何十~何百テラバイトにもなるチェーンデータを非中央集権的に持続的に分散管理できるとでも思ってるの?結局は、Googleのようなところに集中しない?」
解答「SolanaやPolygonはコンセンサスに参加できるノードを制限しています。ちなみにSolanaのバリデータノードは走らせるためだけに一年で数万ドルかかるので一般人には手が出せません。また、Polygonは人が管理するブリッジに全ユーザーの資産をロックしているので、実質中央集権です。バリデータは偽装工作です。もちろん証券でしょう。」
※別解1「Polygonは速いのはいいけどさ、reorg(チェーン巻き戻し)多すぎない?まだ少しの人にしか使われてない黎明期に、そんな調子で大丈夫なの?でもバグった自民党NFTがデプロイされてキッシーが無限ミントされたおもしろチェーンだから、消えたりしないでね。」
※別解2「Solanaはトランザクションの9割は同期用のトランザクションだから実際のTPSはずっと低くない?例えるなら、モバイル事業者が一日10000通話達成したって宣伝しながらそのうち9000通話がその事業に必要な内線ってことでしょ?はなしもりすぎ。お前の父ちゃんアーフロ。」
解答「今もこんな養分いるんですかね。Cardanoはプロジェクトの開始時から世界中のクリプト民から嫌われている稀有なプロジェクトの一つです。日本では反社との接点が報道されるなど真っ黒なブロックチェーンとして知られています。SolanaやPolygonとともにSECから証券と名指しされましたが、反論の余地はないでしょう。技術的にも、UTXOモデルを採用したCardanoにスマートコントラクトの未来はありません。」
解答「頑張ってください」
解答「君たちは、良い人そうだし、駆け出しエンジニアと繋がりたそうですね。君たちの純粋な眼差しを見ると、わたしは胸が締め付けられます。少なくとも来世では幸せになれるでしょう。」
解答「君たちはNEM勢と同じ顔をした若い世代です。英語難しいから日本人がたくさんいるAstarに来たんだよね。わかるよ。はぁ、みんな揃って、優しいのに彼女いない顔をしていますね。来世では幸せになれるでしょう。」
解答「IEOはメチャクチャです。規制の緩い資金調達手段は、売り抜け目的の悪徳プロジェクトが養分を狩る場にしかなっていません。チャートを見る限り今年日本で行われたIEOはすでに全てが死んでいます。今後も触らぬが正解でしょう。しかし、それでも触りにくる養分は集まってしまうので、雰囲気で祭りになりやすい半減期前に、何らかの規制が求められます。」
解答「NFTの所有と、法的な所有は別です。有体物ではない電子ゴミに所有権もクソもありません。」
解答「ブロックチェーン上では、成りすましが容易にできてしまうため、盗まれたふりも紛失したふりも簡単にできます。そのような保険サービスは持続できないでしょう。そもそも代替不可能なNFTの金銭的価値を測るのは容易ではありません。」
解答「ブロックチェーンが無くなる、もしくは止まったら全て思い出になるのは変わりません。」
解答「それはポンジスキームです」
※別解1「あれれ、STEPN息してなくない、ウォウ、ウォウ?」
※別解2「去年は滑稽だったなぁ、STEPN起動しながら歩いてる人たち。ペースが崩れるとトークンがもらえないからみんな同じ歩き方でさ。まるで朝鮮人民軍の軍事パレードなんだ。資本主義も共産主義も、行き過ぎれば同じってハッキリわかんだね。」
解答「チート使って人間のふりして24時間稼働して金稼ぐbot天国になります。ブロックチェーンゲーム(BCG)は、いかにプロトコルをハックして稼ぐかを追究する数字ゲームに還元されるので、純粋にゲームする人間は養分になるでしょう。ポケモンGoのような従来のゲームならさほど大きな問題にはなりませんが、チートでお金を稼げるようになる、しかもそれが他プレイヤーに損を押し付ける形でなので、すぐさま深刻な問題になるでしょう。」
※別解1「掛け金を払ってそれを超えるリターンを期待するゲームは、ゲームではなくギャンブルです。今日からBCGのGはギャンブルのGってことにしましょう。」
※別解2「最近サッカーのBCGを始めましたが、数字比べゲームでした。いつになればサッカーができますか?」
つづく
この程度でも600万は稼げるという夢を持つか、こんなのでもちょっと何かが違うだけで600万稼げるか否かが分かれてしまう業界に闇を感じるか、600万程度で何ドヤってるの?と思うかはご自由にどうぞ(外資系ってもっと稼げるの?)。
歳は30台前半。学部卒。BtoB向けのパッケージ製品の開発プロジェクトで、設計、コーディング、テストあたりを担当している。仕様について発注元との折衝もやっている。
業務で使う技術のうち、自分自身がそれなりに習得しているものだけを書く。プライベートでしか習得・使用していない技術は別。
以上。
PythonもgitもDockerもkubernetesもAnsibleもCIツールもAWSもGCPもRuby on Railsも知らなくてもなんとかなってしまっている。業務でこれらのスキルを要求されることは(今のところは)ないから。
楽でいいと思う一方、このままだと将来ヤバいとも思っている。いざ転職となったときに詰みそう。
でもいざとなったらググっていくらでも独学できるだろうとたかをくくっているので焦ってはいない。
というか「その他」のところに書いた能力が高ければ世の中大体はなんとかなるんじゃないの。知らんけど。
ちなみに自分は構築できないというだけで、プロジェクトではJenkinsとかgradleとかbabelだかwebpackだかでビルド環境は整えられている。
あとプライベートで、単純な仕様の独自言語のコンパイラフロントエンドをC++とLLVMで作っている(これで金が稼げるとは微塵も思っておらず、完全にただの趣味)。
例のAppleのSSL/TLSのバグの件、日本語情報がなかったので意訳しました。
Adam Langleyさんによって書かれた原文はこちら。要所要所に親切なリンクがついているので、ぜひ原文も見てみてください。
Apple's SSL/TLS bug (22 Feb 2014)
https://www.imperialviolet.org/2014/02/22/applebug.html
(Hi Adam Langley, Than you for your blog! We really appreciate you.)
-----
昨日、AppleはばかばかしいiOS向けのセキュリティアップデートを発行した。 それは詳しく明かされていないが、SSL/TSLについてとんでもなく恐ろしい間違いを示すものだった。 その答えは既にハッカーニュースのトップにタレこまれている(https://news.ycombinator.com/item?id=7281378)し、アップルが隠したい秘密はもうバレてしまっていると思う。 そして現在、俺たちはその誤った情報を正すステージに来ているんだ。 ほらここに、Appleのbugがあるんだ。:
static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen) { OSStatus err; ... if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; ... fail: SSLFreeBuffer(&signedHashes); SSLFreeBuffer(&hashCtx); return err; }(Quoted from Apple's published source code.)
(訳者注:(Quoted from Apple's published source code)→sslKeyExchange.c) 2行のgotoがあるだろ。 2行目のgotoは、見て分かる通り常に発動する。 変数[err]にはエラーを示す値が入らず、正常を示す値のままfailに飛ぶってことだ。 それって成功したのと同じなんだよね! この署名検証処理は(訳者注:SSL/TLSハンドシェイクのやりとりのうちの一つである)ServerKeyExchangeメッセージの署名を検証するものだ。 このServerKeyExchangeでは、"the ephemeral key"(通信のための一時的な鍵)を交換するためのDHE や ECDHE という暗号スイートが使われる。 そのサーバーは言うんだ。 「ここに"the ephemeral key"と署名があるよ、ほら、これが証明書だ。君はこれが僕からのものだってわかってくれるよね!」 今、もし"the ephemeral key"と証明書の関係が破たんしているならば、すべては無意味なんだ。 これってつまり、正規の証明書チェーンをクライアントに送信したけど、ハンドシェイクへの署名には正しくない間違った(つまり適当にその辺で作った)鍵を使ったり、そもそもハンドシェイクに署名しなかったりってことができるってことなんだよ! そこには、今君が通信しているサーバーが、サーバー証明書に含まれる公開鍵の秘密鍵を持っているってことの証明が、何もないんだ。 これはSecureTransport(というライブラリ)に入っていて、以下に影響する。 ・iOS 7.0.6より前(俺は7.0.4で確認した) ・OS X 10.9.2より前(10.9.1で確認した) (訳者注:つまりiOS 7.0.6、OS X 10.9.2で解決した) これはSecureTransportを使っているすべてに影響するけど、ChromeとFirefoxはそうじゃない。 ChromeとFirefoxはSSL/TLSのためにNSSを使っている。 でも、それはあんまり君のマシンがSecureTransportを使っていないってことを意味しないよ。(ソフトって更新されるしね) 超特急でテストサイトを作ってみたよ。https://www.imperialviolet.org:1266 ポート番号に気を付けてね。(テストサイトはCVE番号になってるよ) 443は通常通りに動いているからね。 ポート1266のサーバーと443のサーバーは同じ証明書を送っているけど、完全に異なるキーで署名しているんだ。 君がもしポート1266のHTTPSサイトにアクセスできたんだったら、君のマシンはこのイケてるバグを抱えてるってことだね。:) それってつまり、証明書チェーンは正しいってことで、そしてハンドシェイクと証明書チェーンの関係は壊れたってことで、もう俺はどんな証明書も信じないよ。 またこれは、DHE または ECDHE 暗号スイートを使っているサイトに影響を及ぼすだけじゃないんだ。 攻撃者は、この暗号スイートを使うサーバーを自分で建てるようになるだろう。 また、これはTLS 1.2には影響しない。このバグを含まないTLS 1.2の別の関数があったから。 でも攻撃者は使うプロトコルをある程度選ぶことができるから、安心できないよ。 (訳者注:サーバー側がTLS1.2を使えないことにしていたら、それ以外の例えばSSL3.0とかTLS1.0とか1.1で通信が始まっちゃうから。) でもでも、クライアント側でTLS1.2だけを使えるようにしておけば、それは今回の問題の回避策になる。。 同じく、クライアント側でRSA暗号スイートだけを許可するということも、ServerKeyExchangeが発生しなくなるので今回の問題の回避策になる。 (2つのうち、1つ目のほうがだいぶ好ましい。) 俺のテストサイトでは、iOS 7.0.6 と OS X 10.9.2で問題は解決していた。 (更新:このバグはOS X 10.9 のときに入ったように見えたけど、iOS6にもっあったぽい。iOS 6.1.6は昨日リリースされたよ。) こんなような微妙なバグって、悪夢だ。 俺はこれは単なるミスだと思うし、なんかもうほんと最悪って思う。 ここに、今回の問題を明らかにするコードがある。:
extern int f(); int g() { int ret = 1; goto out; ret = f(); out: return ret; }
もし俺が"-Wall "を付けてコンパイルしたとしても、XcodeのGCC 4.8.2 や Clang 3.3は死んでるコード(the dead code)について警告をしないんだ。 本当にビックリだよ!!! ここで警告が出ていたらこの問題は止められたのに。でもたぶん、現実には死んでるコードが多すぎて無視することにしてるんだろうね。 (ピーター・ネルソンが教えてくれたけど、Clangはこれを警告するための"-Wunreachable-code"を持ってる。でもこれ、なんと"-Wall "には含まれてない!) if文に{}をつけないことを許すコーディングスタイルはこの問題を誘発したかもしれない。 でも、人は{}を付けたとしても間違ったプログラムを書くことがあるから、これは俺はあんまり関係ないように思う。 テストケースはこれを見つけることができたはずだけど、今回のはいろいろ条件が複雑なやつだったから難しかったと思う。 TLSのめちゃめちゃ多くのオプションを試さなきゃいけなかったからね。しかも正常系じゃないやつも。 俺、TLSLiteでちゃんとテストしてるか思い出せないもん。(月曜日怖いかも) コードレビューはこの種類のバグについて効果的でありえる。 ただし単なる審査じゃなく、それぞれの変更に対してしっかりとレビューすることだ。 Appleのコードレビューカルチャーがどんなもんか知らないけど、もし俺が同じようなことをやっちゃったとしたら、同僚のWan-Teh や Ryan Sleevi がばっちり見つけてくれたと、固く信じてる。 でも、誰もがそんなにいい仲間を持てるわけじゃないよね。 最後に。昨日、Appleが証明書のホスト名をちゃんとチェックしていなかったことについて多くの議論があったんだけど、 それは OS X のコマンドラインでcurlを使うと、IPじゃない証明書でもIPでHTTPSにつながっちゃうってだけだったよ。変だけど。 Safariはこの問題には関係なかったよ。
サマーウォーズの鑑賞中、セキュリティ描写が気になって映画を半分(主にカズマパート)しか楽しめなかった。
その後、はたしてどのような描写であれば納得感を得られたのかと妄想していたら、妙な答えに行き着いた。
http://d.hatena.ne.jp/LM-7/20090831/1251727185
ここにあるように、もしあの2056桁の数列がRSA暗号における鍵であるとして、健二が素因数分解により平文(おそらくアバターの操作や仮想建物への入室のためのパスワード)の復号をマトモに暗算で行っているということは考えにくい。そこには何らかのショートカットが存在するはず。おそらく、OZの暗号鍵生成アルゴリズムに実装上のバグがあり、何らかの推察(法nに規則性、乱数が甘いとか)を許してしまうような物だろう。これは、おそらくOZの技術者の中では既知のもので、対応中のものだったのではないだろうか。そう、だいたい55人くらいにはそのショートカット法を知られていたくらいには。
ここで思い出してほしいのは、健二はOZのメンテナンスのアルバイトをしていたということ。
メンテナンスのため管理棟(だっけ?)と言われる領域へログインし、何か作業を行っている様子が見られる。どんな作業かは分からないが、物理部の彼らのこと、そうした暗号への興味もあるだろうし、知ってしまっていたとしてもおかしくはない。(こんな危険なバグの対応をバイトの学生に任せるなんてありえないが、あるいはバイトとはこの問題への対応のためのテストであり、その過程で知ってしまったのかもしれない。)
だが、ラブマシーンの描写を見ると、できることはアバターを乗っ取ることだけで、OZの基幹系システムそのものを乗っ取ったわけではない。あくまでアバターの可能な範囲での権限の行使に限られていて、たとえば花札のルールに介入したり、配られる札を操作したりするようなことはできない。
ラブマシーンが米軍によりOZに放たれたとき、彼にできることは相当限られていたはず。
彼が暴れるためには、多くのユーザの秘密鍵の管理を行う管理棟へ入れるアバターを乗っ取ることが必要だった。
ラブマシーンは何かのきっかけで上記の脆弱性を知り、OZ管理者に近いアバターの鍵をなぜか知り、その解を解けそうな人物へ送付する。メールでその鍵の復号を知る。
それを手がかりに秘密鍵へのアクセスを可能にし、あとは選択平文攻撃によってアバターを次々に乗っ取っていく。でも、最初の一歩、管理棟への出入りのための鍵はどこから?
その、最初の鍵は、どうやって手に入れたんだろう?
ここで、一人の傷心の人物が浮かび上がる。
OZでバイトしていた、物理に興味のある、あまり目立たなかった人物。
彼は暗号を自力で解くほど数学の才に恵まれていたわけではなかったが、秘密鍵のありかと、脆弱性があることは知っていた。
じゃん拳に負け、東京に一人残った彼。
傷心の彼はその日、管理塔のまわりをうろつくラブマシーンに気がついた。何でも知ろうとし何でも吸収しようとするbot。
本当は、知識を吸収して報告するだけの何も権限のないbot。
そう、佐久間敬君、きみ、あれに何か渡さなかったかい?その見返りとして健二のアバターを使うように申し出たり?
暴走したラブマシーンとは、あれは君?
昔、妖精現実のトップにあった記事。探しても見つからないや。
「水からの伝言」…水は否定的な言葉を見せたときと肯定的な言葉を見せたときで異なる結晶を作る。
(念のために言うが、↑は科学的事実ではない。しかしネタとして、あえて) これが成り立つ世界を考える。ただし、次の公準も仮定する。
考古学的応用: 水は世界中の言語を理解できるので、 未解読文字の解読に役立つ。 少なくとも、お礼を言っているのか、宣戦布告の文章か、といった程度の判別はつく。 「正しい解読結果をアルファベットで表記したとき1文字目は大文字小文字を区別せずにAである」「…Bである」…と書いてある30枚弱の紙を水に見せて、どれが肯定的かを判断することを、結果の文字列長(この整数値も水に問い合わせることができる)だけ繰り返せば、あらゆる謎の古文書が解読できる。 水さん、ありがとう。
問1: 解読結果が1万文字以内であることは分かっている文がある。 解読結果の文字列長を表す整数値を必ず確定させるのに必要な最小の「水への問い合わせ回数」はいくつか。
問2: 現在は不治の病であるXについて、それを根治する薬品があると仮定する。 その有効成分をIUPAC等の標準的な化合物命名法で記述して1万文字以内であると仮定せよ。 以上によって、水が肯定否定を判断できるなら、難病のいくつかが克服できることを説明せよ。
問3: 水に問い合わせられるときP=NP問題は肯定的に解決されるか。
軍事的応用1: ゆえにRSA暗号、楕円曲線暗号、その他、いかなる未知の暗号であっても、ダイレクトに高速にクラックできる。 上記同様、解読結果のどれが肯定的か1文字ずつ判断させるだけで良い。量子通信・量子暗号さえ解読できてしまうだろう。
軍事的応用2: さらに、暗号に限らず、情報一般に応用できるから、チャフによる妨害や、敵の欺まん電波を見破るように水を結晶させる装置を弾頭に装着することで、電子妨害を受けない強力な兵器を構築できる。
こういうの、大好きだ。