crypto: RSAのSAとECDSAのSAは違う
2025/05/25
Bitcoin プロトコルは一方向ハッシュでデータを違う形にしたり、 デジタル署名で「私はこの子の秘密鍵を知ってるんですよ、教えませんけどね」ということはやっているけれども、 データを符号化して復号するような意味での暗号化は行っていない。
デジタル署名は、楕円曲線の secp256k1 を使った ECDSA だったりシュノア署名だったりする。
使い方としては secp256k1 の秘密鍵を作り、それを公開鍵に変換し、
そこからあれこれしている。
暗号に詳しいわけではないから中身については説明はできないが、
外側の計算は暗号ライブラリがあれば API を呼び出して実装できる
(Bitcoinのプロトコル自体は公開されていて秘匿されていない)。
まあ、そういうのはよいとして。
私が最初に公開鍵暗号として知ったのは RSA という方式だった。 その後で Bitcoin のことをやり始めて ECDSA というものを知った。
どちらも公開鍵暗号を使ったものだったので深く考えたことはなかったのだが、
「秘密鍵で暗号化というのは違う」というのを見かけた。
あれ、RSA で暗号化できなかったっけ?
OpenSSL の API だが、RSA には署名/検証もあれば、private key での暗号化と public key での暗号化がある。
- RSA_public_encrypt - OpenSSL Documentation
- RSA_private_encrypt - OpenSSL Documentation
- RSA_sign - OpenSSL Documentation
ECDSA には署名/検証しかない。
まあ、DSA 自体がデジタル署名アルゴリズムだから ECDSA がそうなのはわかる。
- Digital Signature Algorithm - Wikipedia
- 楕円曲線DSA - Wikipedia
- Elliptic Curve Digital Signature Algorithm
- 楕円曲線DSA - Wikipedia
じゃあ、RSA の “SA” ってなんだ?と思ったら人名だった。 というか、全部人名の頭文字だった。
- RSA暗号 - Wikipedia
- Rivest-Shamir-Adleman
紛らわしい! と怒るのは筋違いだろうが、 同じ “SA” で終わるし RSA だと暗号化・符号化ができるんだから楕円曲線でもできるんじゃないの、 と思ってしまう人が出てきたので「秘密鍵で暗号化というのは違う」といっておかないと誤解されてひどいことになると心配した発言だったんじゃなかろうか。
さっき OpenSSL API の例を出したのも、私が RSA の encrypt/decrypt で組んでいたプログラムを
楕円曲線に置き換えようとして API がなくてすごく探してしまったという体験から来ている。
他の公開鍵暗号方式は知らないので何とも言えないが、RSA が encrypt/decrypt できるのが珍しいのかもしれない。
RSAで署名する方式はRSADSAなのか?
楕円曲線(EC) のデジタル署名アルゴリズムだから EC-DSA ならば、RSA のデジタル署名アルゴリズムは RSA-DSA なのだろうか?
検索してみたが “RSADSA” と呼んでいるサイトはなかった。
暗号の輸出
昔、暗号って輸出禁止になってて解禁されたっていうことがあった記憶がある。
あー、今でも全部解禁というわけではないのね。
インターネット時代であまり意味は無いかもしれないが、少なくとも表向きはダメなのだ。
AppStore の審査で暗号実装に関する質問があるのだが、そういう背景なのかもしれない。
crypt? crypto?
暗号化が “encrypt” なので、”crypt” なのか “crypto” なのかしばしば迷う。
“crypto” だ。
なんで間違いやすいかというと wolfSSL が wolfCrypt という商品を出しているからだ。 wolfSSL は MbedTLS のように組み込みソフトウェア開発でしばしば使われるライブラリだ。