2016-04-13 21 views
0

秘密の秘密鍵でライセンスコードに関するいくつかの値を暗号化してから、暗号化されたデータを表示し、それが私によってのみ作成されたことを確認するために公開鍵(アプリケーションに格納されている)で復号化されます。逆のRSAを使用してライセンスコードを復号化する:秘密鍵で暗号化し、公開鍵で復号する

トラブルは、あなたがパブリックキーで暗号化し、私が何をしたいの逆であるプライベート鍵と復号化と思われています。

SwiftyRSAという名前のライブラリで公開鍵での暗号化しかサポートされていないことにも触れておきましょう。これはキーチェーンにkSecAttrKeyClassPublicという名前で保存されているからだと思います。それはこれが期待していることであり、失敗する原因になります。

私は、キーは技術的に互換性がありますが、私のインスタンスでは動作させられないようです。これは公開鍵の指数が小さいためですか? ssh-keygenを使用して公開鍵を秘密鍵と同じ長さにする方法はありますか?もしそうでなければ、私はどのように進むことができますか?

+1

これは確かに可能です。あなたが作成しようとしているのはデジタル署名で、これはeveywhereで使われています。実際には認証局が証明書を発行するときに、秘密鍵を使用して証明書に関する情報を署名(暗号化)します。これにより、自分の公開鍵を知っていて信頼している場合は、証明書の検証が可能になります。 – Paulw11

+2

暗号化機能 'SecKeyRawSign'を使用する必要があります - https://developer.apple.com/library/ios/documentation/Security/Reference/certifkeytrustservices/#//apple_ref/c/func/SecKeyRawSign暴露する。もう一つは、公開鍵で暗号化し、秘密鍵で復号化するだけです。公開鍵が秘密のままであれば、誰もライセンスコードを生成することはできません – Paulw11

+0

@ Paulw11私が秘密鍵を配布して公開鍵秘密を保持すると、誰かが元々秘密鍵から公開鍵を再作成することはできません?そして、彼らはコードを生成するために公開鍵を持っています。 (私はSwiftyRSAの[README](https://github.com/TakeScoop/SwiftyRSA/blob/master/README.md)の指示に従って鍵ペアを作成しました)。また、公開鍵は秘密鍵よりも小さいので、セキュリティが賢明なのでしょうか?より大きな鍵を配布し、小さな鍵を秘密として保持するか? – Sencha

答えて

0

鍵は常に互換性があるとは限りません(CRTパラメータを含むRSA秘密鍵など)。暗号化手順では、サイドチャネル攻撃から鍵を保護しない可能性があります。暗号化には秘密鍵を使用しないでください。

本当に注意が必要な場合は、メッセージリカバリで署名を使用できます。

十分なスペースがあれば、もちろんライセンスに署名してから暗号化することもできます。これを(追加のAES暗号化なしで)動作させるには、あなたの暗号鍵ペアがあなたの署名鍵よりもかなり大きくなければなりません。

関連する問題