問題タブ [polarssl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hash - mbedTLS ECDSA 署名がハッシュ アルゴリズムに依存するのはなぜですか?
現在、mbedTLS (以前の polarSSL) ライブラリを使用してハッシュ化されたメッセージに署名する作業を行っています。私は現在、明白な機能の使用にこだわっています:
これは正しく機能しているようですが、指定されたパラメーターに問題がありますmbedtls_md_type_t md_alg
。このパラメーターは、特定のハッシュに使用されたメッセージ ダイジェスト アルゴリズムを識別します。
md_alg
「md.h」で定義された列挙型で、次の値を記述します。
enum mbedtls_md_type_t {
MBEDTLS_MD_NONE =0, MBEDTLS_MD_MD2, MBEDTLS_MD_MD4, MBEDTLS_MD_MD5,
MBEDTLS_MD_SHA1, MBEDTLS_MD_SHA224, MBEDTLS_MD_SHA256, MBEDTLS_MD_SHA384,
MBEDTLS_MD_SHA512, MBEDTLS_MD_RIPEMD160
}
SHA3 (keccak 256) をハッシュ アルゴリズムとして使用する必要があるため、mbedTLS はこれを提供しません。現在、別の方法を使用してハッシュし、SHA3 ハッシュをmbedtls_ecdsa_write_signature()
関数に入れています。
パラメータとしてmd_alg
、メッセージ ダイジェスト アルゴリズムを定義するさまざまな値を試してみたところ、次の出力が得られました。
(md_alg) + Signature: (len: length)
signature
(3) + Signature: (len: 70) 304402206AD43BB99B8D97A0890ED7295BDDF8E826AF44AA1FAC9B471EBD415078F3194C02204C0DE87286C2C2B6160B7410A7692DE0995FE79347752A1E828E829FFD981257
(4) + Signature: (len: 72) 3046022100D8C89CD146F08ECA0ACCD66AD0FAF07D8ED761602EBB5DAC8E4F2B6E9634EBC4022100897583BAE04B0B46044AD5910CC704039F7B46DDCBA46344E065687798B2E605
(5) + Signature: (len: 71) 3045022100EBDFC64BC39F77753E5255AED340CFB8946584B7D2AAF5F32A611BFF29631CFC02201233084DD8E96598483F2BEAFACD03E5D8449511A3F6BAB85175158950333084
(6) + Signature: (len: 71) 304502200E7220C8697456CA3151C967EEB2DB6AD6F9E6ACB740E7980D41582496635228022100A01FA55C71A30D042C5932498C0F69ADAB81F5026E5CC0204A304217883B814C
(7) + Signature: (len: 71) 3045022100ADBC91C37D20EA747B9854C26CFE067311C86A168FE8B06237C1D0EB2F8E6F04022004B99EE9B920B57BAE1BFFCED6BDD7ED3C48571BC4D7326F67EC90AF045AC193
(8) + Signature: (len: 71) 3045022027CC7F76558EF628370E3554B575A0FD15F55952AB2E1CC30AC51A21DEFAE1AC0221009746FF2012E005057BFF0674E78235BD08B7C54C2547CAC63EDD5B160245A309
(9) + Signature: (len: 70) 3044022059512D16AC85EB8BFDFBD488A497A0CAA28AEA0A53F280FD7FDB4297C4D49DBD02200AAD2F32B63C76B82B75F3C97F555E5D895C3A8717D5E617AAFD7E8788E4311F
ご覧のとおり、md_alg に異なる値を選択すると、異なる署名になります (ハッシュと private_key が同じ場合)。
md_alg
これまでのところ、「ecdsa.c」ソース ファイルを調べてきましたが、結果に異なる値を選択して異なる出力シグネチャを生成する理由を見つけることができません。
SHA3 ハッシュを使用するために別の方法でできることはありますか? また、署名が互いに異なるのはなぜですか?
ありがとうございました
c - mbedtls を使用して aes 方式で文字列を暗号化する方法は?
mbedtls ライブラリが非常に軽量な C ライブラリであることは誰もが知っています。ライブラリを使用して文字列を暗号化したい。だから私はこのような関数を持っています:
aes_encrypt.h:
そして実装:
私は以下のような関数を呼び出します:
そして、私は以下のようなエラーメッセージを受け取ります:
誰でも私を助けて、エラーメッセージの意味を説明できますか? ありがとう。
c - AES 復号化の失敗
OpenSSL private.pemファイルで AES 暗号化/復号化操作を実行しようとしています。この操作にはhereのpolarssl ライブラリを使用しています。
次のコードを使用してprivate.pemを読み取ります。
出力:
bufferで AES 暗号化操作を実行しようとしています。そのために、次のことを行いました。
暗号化の出力は次のとおりです。
暗号化された秘密鍵は ��xvI���8����˷�%�C���b��s��&�y�k;.����f���Hlength
他に印刷する方法がわかりません。次に、次を使用してprivate_encryptを復号化しようとします。
次の出力が得られます。
出力バッファは �Nxړ��f
しかし、出力は元のprivate.pemと一致するべきではありませんか? ここで何が間違っていますか?
AES を使用した暗号化/復号化操作にprivate.pemの代わりにプレーンテキストを使用すると、同じコードが機能します。