Что лучший способ состоит в том, чтобы зашифровать SSNs в SQL Server 2008?

Я разрабатываю новое веб-приложение с помощью.NET 3.5 и SQL Server 2008, который должен будет сохранить некоторые Номера социального страхования. Я делал некоторое начальное чтение на шифровании базы данных, и это немного сбивает с толку.

Я был бы хорош зашифровать SSNs использование асимметричного ключа, начиная с того способа, которым общедоступное приложение не сможет получить любые из данных, после того как это было зашифровано. Я полагал, что только администраторский интерфейс сможет дешифровать и отобразить данные. Но это кажется, что SQL Server только защищает данные с помощью симметричного ключа?

Так, что лучший способ состоит в том, чтобы зашифровать SSNs в SQL Server 2008? Бонусные очки, если Вы связываетесь с хорошим учебным руководством или два.

7
задан Shea Daniels 16 February 2010 в 18:22
поделиться

3 ответа

На самом деле вы не хотите использовать асимметричное шифрование, потому что оно очень медленное. Скорее вы захотите защитить симметричный ключ асимметричным ключом, а затем держать симметричный ключ под рукой. Честно говоря, я бы придерживался того, что есть в SQL Server, а не разрабатывал все самостоятельно. Действительно хорошее начало здесь http://dotnetslackers.com/articles/sql/IntroductionToSQLServerEncryptionAndSymmetricKeyEncryptionTutorial.aspx

1
ответ дан 7 December 2019 в 07:44
поделиться

Если вы должны хранить SSN и хотите, чтобы они быть зашифрованным, я рекомендую использовать механизм шифрования с симметричным ключом, такой как 3DES или AES. Пусть ключ шифрования будет производным от некоторой парольной фразы, которую знают только те, у кого есть доступ к данным, и которую они должны вводить каждый раз, когда они обращаются к данным.

Пример: (парольная фраза из 10+ символов) -> SHA-1 => KEY.

Не полагайтесь на саму базу данных для шифрования (хотя обязательно изучите такие функции, как TDE или какая-либо другая операционная система, в которой вы запускаете, поддержку полного шифрования диска или файлов в качестве вторичного общего механизма безопасности), лучше используйте встроенные криптографические библиотеки .NET и любой язык программирования, который вы используете для чтения и записи в БД.

Это дает вам то преимущество, что вам не нужно хранить открытый и закрытый ключи или генерировать эти ключи (что требует больших вычислительных ресурсов), и они относительно большие, поэтому хранение более дорого (относительно), вы также не можете должны беспокоиться о том, что ключ будет скомпрометирован, когда неавторизованный пользователь получит доступ к машине, на которой запущен ваш код (за исключением атак MITM, происходящих, когда пользователь вводит парольную фразу).Во-вторых, он гарантирует, что при доступе к ним можно будет расшифровать их только авторизованным пользователем (знающим пароль). В зависимости от вашего бюджета (время, усилия, ресурсы) вы можете добавить многофакторную аутентификацию, при которой ключ шифрования получается как из парольной фразы, так и из некоторого токена, который авторизованные пользователи будут иметь как смарт-карту. В-третьих, шифрование и дешифрование данных с использованием алгоритма шифрования с симметричным ключом будет намного быстрее.

1
ответ дан 7 December 2019 в 07:44
поделиться

Если вы шифруете данные, вы должны спросить себя, кто их расшифрует. Если вы используете систему асимметричного шифрования (например, RSA), то для шифрования используется открытый ключ, а для дешифрования - соответствующий закрытый ключ; «асимметрия» возникает из-за того, что закрытый ключ не может быть повторно вычислен из открытого ключа (хотя оба ключа математически связаны друг с другом).

Асимметричное шифрование имеет тенденцию к накладным расходам. Первое замечание заключается в том, что такое шифрование должно иметь какую-то случайную часть, потому что каждый может зашифровать (открытый ключ, да, открытый): если процесс шифрования детерминирован, то любой может зашифровать все возможные SSN (их меньше миллиарда из них, что действительно мало для современного компьютера) и соответствуют зашифрованным значениям. Следовательно, во время шифрования должно быть добавлено несколько случайных чисел, и зашифрованный SSN больше, чем SSN с открытым текстом.

Известные системы асимметричного шифрования используют математические структуры, которые имеют свою собственную стоимость. Обычно для системы шифрования RSA с «достаточно надежным» ключом зашифрованное сообщение будет иметь длину не менее 128 байт. Некоторые системы шифрования работают лучше; придерживаясь проторенного пути академических исследований, я мог сделать это за 41 байт или около того (с Эль-Гамалем по эллиптической кривой NIST K-163). Меньше кажется сложнее.

Поэтому неудивительно, что данная система баз данных не включает такую ​​возможность по умолчанию.

Для вашей проблемы вы должны сначала определить (и написать) как можно яснее:

  • какие данные вы хотите защитить
  • кто вводит данные
  • кто должен читать data back

, и только тогда вы должны спросить себя, является ли шифрование подходящим инструментом для этого. Шифрование хорошо, когда предполагаемый злоумышленник может получить в свои руки необработанные сохраненные данные. Это означает, что злоумышленник обошел защиту операционной системы. В этот момент все, что знает операционная система, знает и злоумышленник. Если база данных размещена на машине и есть интерфейс, через который можно получить расшифрованный SSN, то эта машина «знает», как получить данные, и злоумышленник тоже ... С другой стороны, если хост операционная система машины считается достаточно устойчивой, тогда шифрование, похоже, вообще не нужно.

Симметричное шифрование базы данных может решить более слабую проблему, при которой злоумышленник получает копию жесткого диска впоследствии . Хост-система знает симметричный ключ шифрования, но знает его только в ОЗУ. Злоумышленник, укравший жесткий диск, не получит этого ключа.

5
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: