単純な非否認/詐欺証明システムの作成
-
02-10-2019 - |
質問
単純な詐欺証明と非否認システムを作成したい場合、主要な機能は何ですか?この質問では、私は主にデータベース行の完全性に集中しています。これはセキュリティ許可の質問ではありません。
サッカーデータベースを例として使用すると、私が実装する重要な機能のいくつかは次のとおりです。
DBAが従来のSQLを使用して行データを変更しないようにします。たとえば、データベースの行が結果としてすでに2:1を保存している場合、DBAが結果を2:3に変更した場合、変更を検出できるはずです。すべての変更は、メインアプリケーションを介して実行する必要があります。
データの行を別の行にコピーすることで、バックエンドの変更を使用しないようにします。詐欺の変更を検出できるはずです。
システムをより詐欺的な証拠にするために考慮すべき他の問題や機能はありますか?私が知っておくべきベストプラクティスは何ですか?どんなポインターも最も高く評価されます。
よろしくお願いします。
解決
他の列の暗号化署名である1つの列を作成します。 IDが署名計算に含まれている限り、IDが変更されるため、行をコピーすることはできません。ハッシュを再計算せずに変更を実行することはできないため、DBAの変更も検出できます。
それはDBAの問題に取り組んでいません 削除 行、気をつけてください - それは、個々の行が適切なビジネスロジックを通過したことのみを検証します。テーブル全体に署名を含める可能性がありますが、それはかなり重くなり始めます!
もちろん、ある時点で秘密が必要です - 署名キーのプライベート部分。あなたのコードはそれにアクセスする必要があります...そしてそのコードを書く人は誰でも たぶん......だろう バックドアを含めるには、秘密鍵などを自らに電子メールで送信します。遅かれ早かれ信頼する必要があります 誰か, 、私は疑う。 (もちろん、さまざまなチームから複数の署名を適用することができます。そのため、チームは何かを偽造するために共謀する必要があります。)
他のヒント
完全に鈍くなるために:あなたはあなたの時間を無駄にしています。
DBAは、データベースへのルートアクセスに相当します。そうでない場合、彼らはかなり効果がないでしょう。システム管理者でも同じ問題が発生し、基本的にあなたができることは何でも、せいぜいプラセボにすぎません。そのレベルのアクセスを持つ悪意のある人についてあなたができる唯一のことは、彼らに最初からアクセスできることではありません。
あなたができる最善のことはそれを作ることです 少し 監査トレイルを作成することにより、より難しくなります。ログインしてログインし、ログアウトし、何をするか、システムが応答するイベントなどをログにします。これの唯一の本当の価値は、手動で何が起こったのかを(できれば)再構築することができることです。
サッカーの試合の結果を変更することに関しては、それがどのくらいの可能性があるかを自問してください。もちろん、実際にはサッカーの試合の結果を変えません。それは単にそれがどのように記録されたかを変えるだけです。それを見たか参加した人は誰でも実際の結果を知っているので、システムでそれを変えている人には何がありますか?
企業では、エラー、悪意があり、和解プロセスによって処理されます。株式仲買人には、システム上にあるものについてレポートを実行するチームがあり、実際に行われた銀行取引と比較します。不一致は赤フラグが付けられます。そのため、システムのバランスを変更できますが、バックアップされます。
このパズルのもう1つの部分は、DBAアクティビティの制限が実際に問題を解決しないことです。アプリケーション開発者は任意のコードをリリースできます。それがレビューされていても、システムはまだビルドエンジニアまたはルートレベルの生産環境にアクセスして修正されたバージョンをコンパイルして実行している人で故障する可能性があります。