2011-06-20 9 views
2

私は小さな内部情報共有アプリケーションを作るためにPerl/MySQL/Apacheを使用しています。セキュリティレベルの異なるユーザーがおり、その多くのユーザーがホストサーバーやネットワークの他の部分に対してroot/admin権限を持つ可能性があります。ユーザー固有の暗号化キーとしてAD(LDAP経由)から何を使用できますか?

私はもともとこのような何かを設計していた:

マスターキーはすべてのコンテンツを暗号化するために使用されるだろうが、明らかに私は(コードで、またDB)プレーンテキストで保存されたこのキーを望んでいませんそのため、各ユーザーの公開鍵を使用して暗号のコピーを暗号化するKeysテーブルがあります。何らかの理由でマスターキーを変更する必要がある場合は、キーのコピーをすべて再生成することができ、データが失われることはありません。

各ユーザーは、パスワードとプレーンテキストパスワードのハッシュで暗号化された秘密キーを持つユーザーテーブルにエントリを持ちます。ログイン時には、このテキストを復号化し、保存された暗号化されたパスワードと比較してIDを確認し、セッション変数でサーバに保存されている秘密鍵をログアウトするまで解読します。

私がしたいのは、管理者以外のすべてのユーザーにローカルパスワードの代わりにLDAPによるAD認証を使用することです。しかし、ユーザーのパスワードはログイン間で変更される可能性があるため、秘密鍵を暗号化/復号化するための暗号テキストとしては使用できません。

私の質問は次のとおりです。私はADから暗号として使用できる、安全性の高い個人データは何ですか?私はこれをADユーザーへのアクセス権を持つ誰にも明らかにしたくありません。&コンピュータなどですが、もちろんこの情報をサーバープロセスから何とか得ることができなければなりません。 (たぶんユーザーのなりすましによって)

このプロセスで他のアイデアや穴を開ける方法はありますか?私はサーバプロセスが潜在的にメモリコンテンツをダンプするために悪用される可能性があることを知っています。あるいは、rootユーザがrawアクセスを通じて同じものを読むことができるかもしれませんが、それは許容されるリスクです。最終的に、ルートまたは物理的アクセスを持つ人は、一般的に信頼できるものです。それにもかかわらず、私は正直な人を正直に保つためにデータベースの内容を暗号化したい。

+0

AD/LDAPグループメンバーシップを使用してデータへのアクセスを管理するだけではどうですか。 – RickF

+0

アクセス制御ではありません。ユーザーの資格情報なしでは取得できない暗号化キーとして使用する必要があります。 ADには証明書などがあり、NTFSはローカルデータをホストキーで暗号化し、そのキーをユーザーキーで暗号化します。それは私が取りたいと思っているアプローチです。だからどこのキーを手に入れる? – SirNickity

答えて

0

あなたが必要とするのは、デフォルトのAD設定では不可能です。デフォルトでは、すべてのユーザーはADのネーミングパーティション(すべてのユーザーオブジェクトが格納されています)で完全な読み取りアクセス権を持ち、匿名ユーザーに同じ読み取りアクセスを許可するようにADを構成することもできます。 ADはプライベートデータを格納するようには設計されていませんが、基本的には電話帳と同じくらいプライベートです。

ADがデフォルトの設定で、認証されたすべてのユーザーがデータを読み取ることができるということに満足している場合は、簡単な方法で変更できない属性を使用できるはずです。

たとえば、オブジェクトのSID(バイナリまたはobjectGUID)を含むobjectSidを使用できます。このIDには、グローバルに一意のオブジェクト識別子が含まれています。

ただし、objectSid属性は、ユーザーのSIDが変更されたときに変更することができます。objectSidのシナリオを変更できるTechNoteの記事「SID vs. GUID」があります。http://technet.microsoft.com/en-us/library/cc961625.aspx

関連する問題