0

さまざまなユーザーからのデジタル署名を検証するアプリケーションがあります。これらのユーザーは、.NET、JAVA、C など、さまざまな言語/プラットフォームでプログラミングしています。まだ多くのアプリケーションが Erlang/OTP で開発されています。Erlang/OTP プラットフォームから多くのアプリケーションをテストすると、すべてが期待どおりに動作しますが、他のプラットフォームから使用すると失敗します。

これは、署名を検証するためのセクションです。

Signature - Base64 enconded string digital signature as 
recieved from users.

SignBinData - is obtained by reconstructing a String (using data 
that was md5 digested and used to generate the signature), that is,

SignBinData = term_to_binary(String)

Then verifying the signature using 
public_key:verify(SignBinData, md5, base64:decode(Signature), UserPublicKey).

このアプローチを使用して、Erlang/OTP でこの実装をテストします。

  1. 記載された手順に従って文字列を生成します。
  2. を使用して文字列をバイナリに変換しますterm_to_binary/1
  3. MD5 をダイジェスト タイプとして秘密鍵を使用して、文字列 (バイナリ) にデジタル署名します。(これを確認するために公開鍵を使用します)。
  4. Base64 で署名出力をエンコードし、base64 でエンコードされた文字列を生成します。この base64 でエンコードされた文字列出力が署名です。

私の問題は、term_to_binary/1バイナリを管理するために使用する場合、ユーザーはそのことを知らず、とにかく適用できないため、Java のような独自の適用可能なメソッドを使用することです。

... some left out code ...
String s = SignatureStringData;
byte[] data = s.getBytes("UTF-8");
signature.update(data);

byte[] digitalSignature = signature.sign();

デジタル署名を生成しますが、検証が不可能であることがわかりました。

私の質問は、Erlang で実装している方法は、Erlang の他のすべてのプラットフォームからのデジタル署名を処理するための普遍的な方法ですか、それとも別の方法があり、これは Erlang/OTP ユーザーのみに適用されますか? ありがとうございました。

4

0 に答える 0