メッセージ認証コード (MAC) を使用して REST API への呼び出しに署名したいのですが、Java、php、Ruby、および C# で簡単かつ快適に使用できるアルゴリズムはどれですか?
より長いストーリー: 私のアプリケーション (Play Framework 2.0) は非常に単純な REST API を提供します。限られた既知の* クライアント グループがアクセスできるいくつかのサービスです。ここではセキュリティが重要であり、クライアントの使いやすさも重要です。
(* 既知とは、最初にアプリケーションに登録する必要があることを意味します。ここで MAC の秘密を取得します。彼らが誰で、どのような技術を使用しているかはわかりません。)
次のアプローチを実装したいと思います。
- SSL を使用する
- MAC で REST メッセージに署名する
署名に PBKDF2WithHmacSHA1を使用してパスワード エンクリプタ (ここのサンプル コードと同様)を使用したテスト ケースを実装しました。特に、署名を URL パラメーターとして送信する必要があり、正しい形式で取得するために 2 回エンコードする必要があったため、署名が機能するまでに時間がかかりました。
生成された署名は byte[] であり、org.apache.commons.codec.binary.StringUtils で UTF-8 エンコードされた文字列に変換し、java.net.URLEncoder で再度エンコードして正しい URL パラメーターを取得します。解決策は機能しますが、愚かで過度に複雑に感じます。
この経験から、この質問にたどり着きました。クライアントがサービスを簡単かつ快適に使用できるようにしたいだけでなく、非常に安全にしたいのです。では、署名にはどの暗号アルゴリズムを選択すればよいでしょうか? Java、php、Ruby、C# などの最も一般的な Web プラットフォームで簡単に実装でき、一般的ではない言語でも何らかの形で使用できます。