0

あなたが前にこのスレッドを読んだなら-私が書いたすべてを忘れてください、私がそれを書いたとき私は酔っていたに違いありません。最初からやり直します:

私は現在、ユーザー入力を検証するためにある種のアルゴリズムを使用するプロジェクトに取り組んでいます。考慮すべき3つのパーティがあります。

クライアント-私たちのウェブページを閲覧する

会社-私たちは、クライアントの要求を処理します

サードパーティ企業-クライアントメッセージの処理

私たちのウェブページでは、クライアントに製品に関するいくつかの情報を表示します。製品に関する詳細情報が必要な場合は、サードパーティの会社に連絡して製品コードを記載する必要があります(それ自体は一意ではありませんが、一般的でもありません)。その見返りとして、クライアントはサードパーティ企業から他のコードを受け取ります。このコードは、承認のためにコードを検証するWebページに入力する必要があります。

私たち会社がサードパーティ会社とのやり取りがなかった場合が最善です。純粋な暗号化は、長すぎる文字列を生成するため、画像から外れています。これはSMSで行っているため、コードは短くする必要があります。

私がこれまでに思いついたもの:

すべての製品について、ベース16(0-f)でいくらか一意のコードを生成します(一意であるかどうかは関係ありません)。製品に関する詳細情報が必要なクライアントは、製品コードを記載したSMSをサードパーティ企業に送信します。代わりに、クライアントは同じコードを受け取りますが、数字は乗算され(2倍になる可能性があります)、36進数に変換されます。さらに、コードに最後の文字である制御番号が追加され、コードがLuhnで有効になります。 36進数のアルゴリズム。ユーザーが受信したコードを入力すると、会社はサーバー側で製品コードに対して検証します(Luhnに対して検証し、2で除算して、16進数に戻します)。

これはかなり安全で適切に聞こえますか?2人が通信する必要がない場合に、3人がメッセージを送信する有効な方法ですか?

編集して申し訳ありませんが、最初の投稿を書いたとき、私の心は他の場所にあったに違いありません。

4

5 に答える 5

2

たとえば、Luhnアルゴリズムを使用すると、チェックサムでTrueまたはFalseが返されるだけです。あなたが提供したサンプルコードは、2つの異なる値からハッシュできるチェックサム結果(例:12345)が必要であることを示しているようです。この問題はもっと難しいでしょう。

第三者はどのようにこの価値を創造しますか? 彼らが実行するための Javascript コード、または他の言語を提供しますか? 共有秘密鍵を持っていて、その秘密鍵で値を対称的に暗号化できなかった場合は、暗号化する部分に既知の値をプレフィックスとして付けて、すぐに確認できるようにすることができます。

彼らのコード:

  to_send = encrypted(shared_key, 'check' + code)

あなたのコード:

  unencrypted = decrypt(shared_key, to_send)
  if not unencrypted.startswith('check'):
    return False # failed check
于 2009-04-29T12:24:58.420 に答える
1

なぜ「チェックサム」なのですか?サードパーティは、あなたが提供した小さなユーティリティを実行できませんか? 必要なのは、サードパーティがコンピューターで実行し、製品コードを入力して、5 桁の結果をキー コードとしてクライアントに送信できる 5 桁の暗号化機能だけです。

エンクリプタは、常に同じ入力から同じ結果を生成します。

次に、クライアントからプロダクト コードとキー コードが送信されます。その暗号化装置の正確なコピーを使用して製品コードを実行し、その結果をキー コードと比較します。

このシステムのセキュリティは、基本的なアーキテクチャを変更することなく強化できます。

-アル。

于 2009-04-29T21:48:25.350 に答える
1

わかりましたので、他のアプリケーションと自分のアプリケーションとの間の対話は必要ありません。また、コードを 6 文字に制限したいと考えています。ここに私の考えがあります:

  • ブルートフォース攻撃をより困難にする10文字を使用してください。
  • すべてのラテン文字と数字を使用してください。これにより、36 の可能な文字値が得られます。
  • 大きな数値ライブラリを使用して、単純にコード (Base36 数値として取得) をばかげたほど大きな値 (たとえば、2048 ランダム ビット) で乗算してみませんか。それを Base36 に変換し、最後の 10 桁を取ります。または、最初の 5 つと最後の 5 つかもしれません。または、元のコードに依存する他の組み合わせかもしれません。これがどれほど暗号学的に強力なのかはわかりませんが (おそらくそれほどではありません)、コードをクラックする努力は、単純にサービスの料金を支払うよりもおそらく小さいでしょう。
  • または、コードにソルト (秘密の文字列を追加) してから、その MD5 を計算することもできます。MD5 (またはその一部の N 文字) をコードとしてユーザーに返します。私は専門家ではありませんが、これは暗号的にはかなり問題ないはずです。MD5 の結果を Base36 に変換することで、このアルゴリズムの強度を高めることができます。
于 2009-04-29T12:51:22.320 に答える
0

サードパーティ企業との長い議論の末、クライアントの SMS を私に渡すのが最善の解決策であると結論付けました。私が生成したコード。私の観点からは最適ではありませんが、少なくとも今は好きなようにできるようになりました。

ご入力いただきありがとうございます。

于 2009-05-14T10:08:50.887 に答える