質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1194閲覧

RSA公開鍵(512)のbyte数

yamasa

総合スコア23

公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/07/06 15:10

実現したいこと

Swiftで生成されるRSA512公開鍵のbyte数を94byteにしたい。

発生している問題

Android側で生成されたRSA512公開鍵のbyte数は94byteで一致していません。
iOS(Swift)側は74byteになっています。

下記サイトを見ると94byteが正しいのではと推測しています。
鍵生成アルゴリズムと強度ごとの公開鍵の長さ

公開鍵、証明書関連の知識が乏しくて、基礎的な間違いをしているかもしれませんが
何卒、よろしくお願い致します。

Swift

1 // 呼び出し処理 2 let keys = generateKeyPair() 3 var error: Unmanaged<CFError>? 4 if let cfdata = SecKeyCopyExternalRepresentation(keys.publicKey!, &error) { 5 let keyData:Data = cfdata as Data 6 let publicKeyArray = [UInt8](keyData) 7 // ここで74が表示されてしまう。 8 print("byte数 " + publicKeyArray.count.description) 9 } 10 11 /** 12 * 公開鍵、秘密鍵生成 13 */ 14 func generateKeyPair() -> (publicKey: SecKey?, privateKey: SecKey?) { 15 // 鍵の形式を指定 16 let parameters: [String: Any] = [ 17 kSecAttrKeyType as String: kSecAttrKeyTypeRSA, 18 kSecAttrKeySizeInBits as String: 512 19 ] 20 21 // KeyPairを生成する 22 var publicKey: SecKey? 23 var privateKey: SecKey? 24 let osStatus = SecKeyGeneratePair(parameters as CFDictionary, 25 &publicKey, 26 &privateKey) 27 28 // 公開鍵と秘密鍵を返却する 29 switch osStatus { 30 case noErr: 31 return (publicKey, privateKey) 32 default: 33 return (nil, nil) 34 } 35 } 36

補足情報(FW/ツールのバージョンなど)

XCode 9.4.1
Swift4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

なにをしたくて94byteにしたいのですか?

下記サイトを見ると94byteが正しいのではと推測しています。

その推測が正しくない場合にはどうするつもりなんでしょうか

投稿2018/07/06 22:40

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamasa

2018/07/08 03:19 編集

ご回答ありがとうございます。 >なにをしたくて94byteにしたいのですか? クライアント(iOS or Android)側の秘密鍵で暗号化したメッセージをサーバ側で復号させる為です。 (1).初回ログイン時   ・クライアントで、秘密鍵と公開鍵のペアを生成して、公開鍵をサーバへ渡す。   ・サーバは受け取った公開鍵をクライアント毎に保存する。 (2).2回目の通信時   ・クライアント側の秘密鍵で暗号化(電子署名)したものをサーバ側へ渡す。   ・サーバ側では(1)で受け取った公開鍵で復号。 サーバ側で復号させる時に Android側は成功していますが(byte数は94byte) iOS側からはExceptionが生成されています。(byte数は74byte) ※エラーメッセージ MSG=java.security.specInvalidKeySecException:Inappropriate key specification: IOException: Detect premature EOF 上記のように記入しましたが、改めて確認した所 IOException: algid parse error, not sequenceでした。 >その推測が正しくない場合にはどうするつもりなんでしょうか  答えになっているか自信ないのですが  言語毎でRSA512公開鍵のbyte数が一致しないというがわかれば  サーバ側でOS毎に復号処理を分岐させるとか、ですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問