2

私は、特定のクエリ文字列パラメータを持つリダイレクトの動作によってターゲットサーバに詳細を提供する必要があるオリジナルサーバを持っているとします。しかし、私はそれらの詳細が私のオリジンサーバーから来たものであることを保証する必要があります。Ruby:真正性を保証するために文字列に暗号で署名しますか?

また、ターゲットサーバの完全性を確認できません。または、具体的には、ターゲットサーバが侵害されて、悪意のある人が暗号鍵を読み取った可能性があります。

公開鍵/秘密鍵ペアを使用してクエリ文字列に署名できると思っています。オリジンサーバーはプライベートキーを使用して文字列に署名し、ターゲットサーバーは公開キーを使用してオリジンサーバーからのものであることを確認し、メッセージは改ざんされていません。もしそうなら

私は私が作った、ここで任意の仮定が間違っているかもしれない、遠く暗号の専門家か何かからだ、私を修正してください:)

を私がする(うまくいけば)簡単な方法の後、基本的ですこれはRubyで行います。

答えて

1

おそらく、クエリデータ(あなたのケースではリダイレクトURL)に署名する最も簡単な方法は、HMACを使用することです。 HMACは、公開鍵/秘密鍵暗号の形式ではなく、キー付きハッシングの形式です。この場合、元のサーバーと宛先サーバーは共通のキーを共有する必要があります。

あなたが探しているモジュールがruby-hmacで、あなたの送信元と送信先サーバがような何かしなければならないでしょう:

require 'hmac-md5' 
HMAC::MD5.new("<your shared key>").update("<your URL to check>").hexdigest 

をダイジェストが元にHMACによって計算されたデスティネーション側の比較両辺は同じ計算をします。 HMACの16進数は、ソースから宛先への追加のクエリパラメータによって簡単に転送できます。

+0

これは興味深いですが、私は元のサーバーとターゲットサーバーの間で全く同じキーを共有する必要がないことを望んでいました。基本的に私は起点サーバーへの物理的なアクセスしか持たず、ターゲットサーバーは第三者によってホストされています。これは現在の変更ではありませんが、標的サーバが侵害される可能性のある行と、悪意のある者によって使用されている暗号化キーが存在する可能性があります。私は各ターゲットサーバに固有のHMACキーを使用することができますが、複雑さを増やすので回避したいと思います:) – jimeh

+0

HMACを使用してホスト固有のHMACキーを派生させることができます。 HMAC :: MD5.new(HMAC :: MD5.new( "<あなたの秘密鍵>"))update( "").hexdigest).update( "あなたのチェックするURL>")。hexdigest'、 HMAC :: MD5.new( "<あなたの秘密鍵>")。( "").hexdigest'を秘密鍵としてリモートパーティーに与えます。これはおそらく、公開鍵/秘密鍵の暗号化を設定するより簡単です。公開鍵/秘密鍵の暗号化の署名は、システム間で転送される多くのデータであることを忘れないでください。 – modelnine

+0

[MD5が壊れている](http://www.kb.cert.org/vuls/id/836068)、暗号化目的では使用しないでください(推奨)。 – dbenhur

関連する問題