問題タブ [shared-secret]
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.
javascript - HTML5 SPA でペイロード署名を行う効率的な方法
Web アプリケーションでペイロード署名を行う効率的な(つまり、パフォーマンスの良い) ロジックを実装したいと考えています。HTML5 クライアントの目標は、受信したペイロードのコンテンツが実際にバックエンドによって生成されたものであることを保証することです。
ユーザーは簡単に HTML5 ソースを開いてソルト フレーズを見つけることができるため、共有ソルトを使用してペイロード ハッシュ生成を行いたくありません。
バックエンドが秘密鍵を使用してペイロード署名を追加し、HTML5 クライアントが焼き付けられた公開鍵を使用してそれを検証する RSA 署名を今のところ実装しました。ただし、署名生成プロセスには 250 ミリ秒かかり (比較的小さなペイロードの場合)、署名付き要求の性質上、この時間は許容できません。
他の唯一のアイデアは、クライアントがバックエンドとのセッションを初期化するたびに、実行時に共有シークレットを生成することです。ただし、シークレットはプレーンテキスト形式で送信できないため、Diffie-Hellman 交換メカニズムを実装する必要があるようです。これは、可能であれば回避するか、既存のライブラリで自動化したいと考えています。
製品の販売方法の性質上、機密性と暗号化はアプリケーション層で行う必要があることに注意してください。トラフィックを暗号化するつもりはありません。これは、お客様が実装する場合と実装しない場合があります (イントラネット アプリケーションであるため)。ただし、ライセンス チェック メカニズムなどに関連するものを公開することは避けなければなりません。バックエンドはクラウドベースではなく、私たちによって制御されていませんが、オンプレミスの顧客のマシンにインストールされています.
フロントエンドはJavascript、バックエンドはJavaです。