2011-01-04 11 views
2

これは私の最初の質問ですので、私が間違っているかどうか教えてください!文字列の完全性を保証する私の方法は安全ですか?

私はEclipseでAndroidアプリケーションを構築しており、バーコードリーダーでQRコードを読み取っています。これはすべてうまく動作しますが、ユーザーに「報酬」を含む「特殊ケース」のバーコードがあることがあります。

この「報酬」は、特別にフォーマットされた文字列に含まれています。この文字列は、システムを不正行為しようとする人々によって改ざんされる可能性があります。これは大きな問題ではありませんが、私はそれを防ぐための措置をとっています。今私の質問は...これらのステップはどれくらい安全ですか?そのような

***Code-v1.0:HASH:CODE_ID:REDEEM_ONCE:CODE_ACTION:ARG 
(REDEEM_ONCE has 3 possible values) 

私のハッシュシステムワーク:

salt = "************:***"; // didnt think it wise to post this, but the length is 
          // the same and its alphanumeric 
MD5 = salt . ":" . codeParts[2] . codeParts[5] . codeParts[4] . ":" . codeParts[3] . ":"; 
MD5 .= codeParts[4] . codeParts[3] . ":" . codeParts[5] . codeParts[2]; 

このAは

***Code-v1.0:31c8f90a4050:1001:0:C:1337 
***Code-v1.0:6a9c4e8d92da:1002:C4D23A1B:C:1337 

そうは次のように文字列がフォーマットされています。ここでは

は、文字列の2つの例がありますこれを行うには安全な方法ですが、コードはハッシュに影響を与えることなく改ざんされているようには見えませんが、誰かがハッシング・スキームを試してみれば、それはすべて無意味になります(これは、サーバ側にあるように「見つけ出す」というリスクはありませんが、誰かがそれを見つけ出すならば)。

あなたの考えは?

+0

MD5が安全でないと思われる場合は、SHA-256またはSHA-512を使用できます。 – fiction

+0

これは合法的にこれのセキュリティを向上させるか、それともそれほど差はないでしょうか? – R4000

答えて

1

あなたがパートとハッシュを送信しましたが、どこでも塩ではない場合(確信してください))、正しいトラックのように見えます。 備考:

  1. なぜmd5を使用していますか? SHAファミリはより安全です。
  2. 当社の支払プロバイダは、最近の衝突(自分の推理)が劣勢ある長い文字列を確認するために、このような文字列の書式を設定するために行ってきました:

codepart1.SALT.codepart2.SALT.codepart3.SALTなどを

は、技術的には、それは私が考えて、塩ではないでしょうが、それでも...

は、だからあなたのハッシュとあなたのcodepartsを送信し、codepartsと塩/ secretstringからハッシュを再作成し、あなたが設定されています。

私は1つの問題があります:あなたの秘密鍵は本当に秘密でなければならず、それはあなたのアプリケーションにあります。したがって、リバースエンジニアリングはあなたのハッシュがどのように作られるかを示すことができるので、送信するフィールドとハッシュを変更することができます。

+0

私のアプリケーションは、バーコード(およびハッシュ)をスキャンし、すべてのチェックを行い、アプリケーションにハッシングスキームまたは塩が含まれていないことをサーバーに送信します。私はSHAと複数の塩についてあなたのアドバイスを取るかもしれません。私が今残した最大の疑問は、私の '文字列をハッシュする'の同じデータの「繰り返す」ことです。それは実際にハッシュのセキュリティを高めるかどうかですか? – R4000

+0

/は関係ありません。あなたが最後に1文字を追加したとしても、あなたがハッシュしたい文字列を少し変更するだけで、結果は全く異なります。 – Nanne

+0

助けてくれてありがとうNanne。 +1受け入れられた回答:D – R4000

関連する問題