Kernel/VM探検隊@東京 No17 https://kernelvm.connpass.com/event/321962/
![署名とゼロ知識証明の初歩](https://cdn-ak-scissors.b.st-hatena.com/image/square/ce068e208e26d9a668fd120218763d852f8563f4/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fa5e9e1e01a584c5586a5eb54373edac5%2Fslide_0.jpg%3F31331547)
ECDSAでJWTによる電子署名を作成することがあったのでメモ ECDSAとは 楕円曲線暗号 - Wikipedia の一つ 楕円曲線暗号(だえんきょくせんあんごう、Elliptic Curve Cryptography、ECC)とは、 楕円曲線 上の 離散対数問題 (EC-DLP) の困難性を安全性の根拠とする 暗号。 暗号化と復号とで異なる2つの鍵を使用し、暗号化の鍵を公開できるようにした公開鍵暗号 RSA暗号 と比べて、短いデータ長で処理速度も早いが同レベル安全性が実現できるのがメリット CryptoKit を使ってやること CryptoKitを使って以下の手順により署名を作成していきます。 鍵の生成 電子署名の作成 全体のコードはこちらに上げてあります。 Key Pairの生成 CryptoKitの P256.Signing.PrivateKey を使えば2行で書けます let p
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS1.2での暗号スイートの一例ですが、なんでこんなにいくつもアルゴリズムを使う必要があるの?と思うわけです。しかも、ECDHEとECDSAとEdDSAなど用語が似ていたり、RSAは鍵交換と認証を両方やってしまったり、勉強している中でとても混乱してしまいそうです。 TLS1.2とTLS1.3の違いも含めて、自分なりにまとめて整理していきます。間違いがあればご指摘いただけると嬉しいです。 TLSで行われていること 以下の4つの視点でまとめていきます。仮にクライアントAがサーバBと安全ではない経路を使って安全に通信したいとします。 鍵交換 Aは暗号化用の鍵を誰にも知られずBに伝えたい 認証(デジタル署名) AはBが本当にB本人であることを知りたい 暗号化 Aは長いメッセージを誰にも知られずBに伝えたい 完全性の検証
この記事では、ユニバーサル Windows プラットフォーム (UWP) アプリでメッセージ認証コード (MAC)、ハッシュ、署名を使ってメッセージの改ざんを検出する方法について説明します。 メッセージ認証コード (MAC) 暗号化は、承認されていない個人によるメッセージの読み取りを防止できますが、その個人によるメッセージの改ざんを防止することはできません。 メッセージが改ざんされたことにより、そのメッセージが無意味な内容にすぎない場合であっても、実際にコストが発生する場合があります。 メッセージ認証コード (MAC) は、メッセージの改ざんを防止します。 たとえば、次の場合を考えてください。 ボブとアリスは秘密鍵を共有し、MAC 関数を使うことに同意しています。 ボブはメッセージを作成し、そのメッセージと秘密鍵を MAC 関数に入力して MAC 値を取得します。 ボブは、[暗号化されてい
電子署名で重要な役割を果たす公開鍵暗号は、暗号化と復号とで異なる2つの鍵(秘密鍵と公開鍵)を使用する方式です。秘密鍵は、その所有者(署名者)によって秘密を保って管理される鍵であり、秘密鍵と対になる公開鍵は基本的に公開することが可能で、他の人(署名検証者)に利用してもらうための鍵です。電子署名は、秘密鍵鍵で署名を作成し、秘密鍵と対になる公開鍵で検証することになります。 電子署名法で、使用が認められている「公開鍵暗号」としては、RSA暗号方式、DSA署名方式、およびECDSA署名方式の3種類です。このうち、DSA署名方式とECDSA署名方式は、公開鍵暗号に分類されますが、署名しかできない公開鍵暗号方式です。 1.RSA暗号方式 RSA暗号方式は、現在最も一般的に使われている公開鍵暗号方式です。RSA暗号方式では、2つの大きな素数 p と q を生成し、 p と q の積 n ( n = p ×
ECDSAの署名からどうして公開鍵が取得できるの?という聞かれて何でだろうねって話になったので調べてみた。 署名から公開鍵のセットを復元 Rubyではecdsaのgemを使えば以下のように署名と署名対象のメッセージから公開鍵を取得できる。(署名対象のメッセージはどうせなのでBitcoinで使用されているのと同じトランザクションのsighashを使用。そのためbitcoinrbのgemも利用している) 実行すると↓のように2つの公開鍵が抽出できる。 0259f6658325c4e3ca6fb38f657ffcbf4b1c45ef4f0c1dd86d5f6c0cebb0e09520 03a9255e098f4075e9ebfaf7859f459095667879db33e977fc8c91029afa8a2490 ↑のコード上の署名はこの内の0259f6658325c4e3ca6fb38f65
Golang, Node.js, Kotlin, Swift での ECDSA それぞれの言語でキーペア生成、署名生成、署名検証をおこないます。 公開鍵は PEM 形式, 署名データは ASN.1 エンコードした結果のバイナリデータを Base64 形式で出力します。 公開鍵を PEM 形式としたのはただ単によく見かけるから、という理由からです。(検証をおこなうという意味では DER エンコード されたバイナリデータを Base64 もしくは Hex 形式で出力するだけで十分だと、後から気づきました...) Golang Golang は標準ライブラリが充実しているため、さほど苦労することなく扱うことができます。 参考: golang ecdsa パッケージ 以下のコードは version: 1.13.3 で動作を確認しています。 package main import ( "crypto
「そうか!そうだったのか!」 男は突然つぶやいた。男はCAPI(CryptoAPI)を使ってWindows証明書ストアから選択した(秘密鍵が関連付いている)証明書にてRSA方式のデジタル署名を生成するプログラムをデバッグしていた。これまでは問題無く動作していたのだが、Adobe Acrobatから「IDを追加」-「今すぐデジタルIDを新規作成」-「Windows証明書ストア」を使って登録した秘密鍵(署名鍵)を使うとエラーになると言う問題で苦しんでいたのである。CAPIの実装は以下のようになっていた。 HCRYPTPROV hProv = NULL; HCRYPTPROV hKeyProv = NULL; HCERTSTORE hStore = NULL; DWORD dwKeySpec; BOOL fCallerFreeProv = FALSE; HCRYPTHASH hHash = NU
初めに 「署名とはメッセージのハッシュ値を秘密鍵で暗号化したものであり、検証は署名を公開鍵で復号してハッシュ値と等しいかを確認することである」という説明(×)をよく見かけます。 正しい署名の定義と実際のRSA署名がどのようなものであり、上記説明(×)がなぜよくないのかを理解しましょう。 署名の定義 署名の解説は署名の概要でも解説しましたが、再掲します。 署名(方式)は鍵生成(KeyGen)、署名(Sign)、検証(Verify)の3個のアルゴリズムからなります。 KeyGenではアリスが署名鍵sと検証鍵Sを生成します。署名鍵sは自分だけの秘密の値なので秘密鍵、検証鍵Sは他人に渡して使ってもらう鍵なので公開鍵ともいいます。 Signは署名したいデータmに対して署名鍵sを使って署名と呼ばれるデータσを作ります。 データmと署名σのペアを他人(ボブ)に渡します。 Verifyはボブが検証鍵Sを使
はじめに 「クラウドを支えるこれからの暗号技術」のデジタル署名の説明へのツッコミtweetをしたところ、著者の方との遣り取りが始まったのですが…。 ※togetterまとめ「電子署名=『秘密鍵で暗号化』」という良くある誤解の話に経緯があります 認識の齟齬についてtwitterでどうこうするのは難しいですし、批判ばかりなのも建設的ではないので、「自分ならこう書くだろう」という文面の形でまとめてみました。 ※なお、電子署名を含めた公開鍵暗号全般に対する私の説明を2つの公開鍵暗号(公開鍵暗号の基礎知識)にまとめています。 署名の説明案 前提 「クラウドを支えるこれからの暗号技術」Web公開されているPDF、2018/3/11時点(最終更新2017/11/11の4.6節デジタル署名(p.50)を、書き換えるとしたら、という前提で文面を作っています。 ※そのため既存の文面の流用や、他の節を参照する記
とくに、英語の decryption を日本語でなんと呼ぶかは人によってまちまちです。 復号 と呼んでいる人もいるのですが、復号は decode の訳語として使いたいので、このエントリでは 平文化 を使います。 公開鍵暗号とは 玄関の鍵は閉めるときも開けるときも同じ鍵を使います。金庫の鍵も普通はそうです。では 金庫に貴重品を詰めて送ってもらう時はどうでしょう? 金庫を閉める鍵と開ける鍵が同じだと、金庫にものを詰めてもらう相手にその鍵を渡す必要があります。その鍵を郵送で送ろうとしたら、途中で誰かに見られて複製を作られてしまうかもしれません。大事なものを送るために鍵をかけようとしているのに、同じ労力をかけて鍵を受け渡さなければいけないとなると本末転倒です。 これは、暗号通信でも同じことが言えます。 そこで、暗号通信において 閉めることしかできない鍵 と 開けることしかできない鍵 のペアを使うこ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く