web-dev-qa-db-ja.com

経験の浅いデータベース開発者のための実用的なセキュリティ? (HIPAA)

うまくいけば、私の質問はここで尋ねるにはあまりにもユニークではありませんが、いくつか検索した後、似たようなものは見つかりませんでした。

比較的経験の浅い開発者(私のベルトの下にあるこれを除いて1つの大きなプロジェクトのみ)として、保存データをMSSQLとメモリ内で?

このアプリケーションが実行されるサーバー自体は、私の知識(私の責任ではありません)にHIPAAに準拠していますが、クライアントマシンは内部から非常に脆弱であり、深刻なHIPAA違反は私の家族のビジネスに多大な損害を与える可能性があると思います。私はビジネスの成功を支援しようとしているので、品質を犠牲にしてこのプロジェクトを完了することを急いでいません。彼らに刑事告発を迫られることはありません...

ここで答えるには範囲が広すぎるか曖昧な質問の場合は、プログラマー向けのセキュリティに関する推奨事項をいくつか入手できれば幸いです。ベストプラクティスに関する情報の矛盾や意見の不一致が非常に多いため、セキュリティ素人をグーグルで検索するだけでは圧倒されます。 (それが役立つ場合、私は主にC++とMSSQLで作業しており、Windows環境に限定しており、ペストのような「非営利」のライセンスツールを避けています。)

2
Austin McCool

包括的なソリューションには、depth、つまりレイヤーのセキュリティが必要になります。システムの強化、ネットワークアクセスの制限、実質的なロギング、監査、およびSIEMアプローチのほかに、データベース内のデータも保護する必要があります。

明らかに、HMAC/SHA-256および100,000回以上の反復またはbcryptまたはscryptを使用したPBKDF2のような強力なハッシュアルゴリズムを使用して、ログイン情報を保護します。単一の反復を伴うMD5またはSHA-1は、ソルトを使用しても、事実上プレーンテキストです。 Bcryptは、塩漬けの問題と適応コストの問題も処理します。

特にHIPAAの場合、PIIを保護することが重要です。思い出す必要のある機密情報については、強力な暗号化が必須です(AES-128または256、CBC、CTR(一意のナンス付き)、またはGCMモードを使用することをお勧めします)。適切なキー管理も重要です。 DUKPTシステムまたはその他の変換可能な鍵導出スキームを使用して鍵の重複を減らすか、(理想的には)HSMを使用して鍵を管理および保護することは、この点で強力な動きです。

機密性は高いが検索可能である必要はないが、単に検索可能である情報の場合、SHA-256(またはさらに良いのはHMAC/SHA-256)のような強力な暗号化ハッシュ関数(CHF)を使用すると、(あいまいでない)検索を実行できます。静止状態でデータを保護しながら、クエリ内のそのデータに対して。これはエンタープライズ環境ではあまり一般的ではありませんが、HIPAAの懸念については、少なくともパフォーマンスのニーズに照らして評価する必要があります。

より具体的な質問がある場合は、ここにコメントしてください。それらが自己完結型である場合、インラインで回答できますが、より大きなものはおそらくサイトで独自の質問に値します。

ああ、そしてあなた自身の暗号を決して転がさないでください。必要なことをすべて実行するために、プロの暗号学者や暗号化開発者によって作成されたC#または.NETライブラリがあります。それらは監査され、更新され、多数の眼球を持っています。 BouncyCastle はおそらく最もよく知られています。

0
Andy