2015-05-15 2 views
1

У меня довольно простые требования к SQL Server, где у меня есть столбец типа int, и я хочу зашифровать этот столбец, учитывая, что функция, которая будет использоваться для шифрования столбца, должна генерировать одинаковое значение каждый раз это называется.Шифрование согласованного столбца SQL Server

Контекст

  1. У меня есть система с 2 пользователя роли источника роли, Target Роль
  2. Источник пользователи Роль генерации таблиц со следующей структурой столбцы ID => Int метаданных => VARCHAR
  3. Моя система будет генерировать копию исходной таблицы с обфускацией ID
  4. Пользователи целевой роли будут иметь доступ к сгенерированной таблице и могут добавлять/обновлять столбцы метаданных, однако они не должны знать четкие ID

My Trials

  1. Я попытался ENCRYPTBYKEY с идентифицирующей и без идентифицирующей однако каждый раз, когда я называю эту функцию, он создает другое значение, которое может быть полезным в некоторых случаях, однако у меня это не один из них :)
  2. Кроме того, я попытался с помощью ENCRYPTBYASYMKEY и то же поведение оказалось что отличается выход с каждым вызовом
  3. Я также нашел эту forum post, что упоминая SQL Server использует Rando m вектора инициализации

Вопрос: Каковы возможные решения для выполнения моих требований, учитывая, что функция будет использоваться для шифрования таблиц с миллионами записей.

+0

Каковы ваши * настоящие требования? Почему такое же значение? Вы вводите в заблуждение шифрование с хешированием? Симметричное шифрование, которое * не использует соление, считается * небезопасным * и сломанным по определению. Причина чрезвычайно проста - кто-то может создать карту зашифрованных строк и восстановить исходные данные с помощью простого поиска. * Почему * вы хотите идентичное шифрование, когда вы можете просто расшифровать с помощью оригинального ключа? –

ответ

1

Каковы возможные решения для достижения своих требований

Нет ни одного.

TLDR;

Современное шифрование должно удовлетворять нескольким свойствам, по одному из которых Semantic security. Семантическая безопасность в терминах непрофессионала означает, что если у вас есть зашифрованные сообщения, вы не можете получить дополнительную информацию об открытом текстовом сообщении. Однако ваши требования прямо противоречат этому, так как, имея доступ к достаточно зашифрованным сообщениям, можно получить значение простого текста. Так немецкая машина Enigma была взломана во время 2-й мировой войны (они повторно использовали ключ, тогда как вы хотите исправить IV. Результат тот же, хотя можно увидеть обычный текст).

Для этой цели Initialisation Vectors были изобретены и должны использоваться.

Что вы будете делать? Ну есть два варианта действительно:

  • Уточнить ваши требования
  • Используйте карту, которая не предполагает семантическую безопасности, например,(1 -> 9478, 2 -> 9572 и т. Д.). Этот параметр полезен, если вы просто пытаетесь обфускать такие вещи, как ID, например. вы не хотите, чтобы было ясно, сколько продуктов компания продает.
+0

Спасибо @oleksii за ваш ответ. Я добавил раздел «Контекст» на мой вопрос, поэтому, если вы можете предоставить дополнительную поддержку :). –

+0

@ HossamBarakat Вы запутываете шифрование с хешированием? –

+0

@PanagiotisKanavos Спасибо за примечание, я согласен с вами в том, что моя ситуация более уместна для хэширования. Я думал о создании хеша для входного столбца и сохранять эти значения внутри таблицы сопоставления и управлять разрешениями безопасности для этой таблицы. Как вы думаете? –

0

Вы должны написать свои собственные функции шифрования, чтобы сделать это, почему вы хотите сделать это, хотя, имо может представлять угрозу для безопасности

+0

Не могли бы вы подробнее объяснить, почему это может быть угрозой безопасности? и в отношении моего шифрования можно предоставить образцы, ссылки, ... с учетом требований к производительности. –

+1

Любое шифрование, которое создает одинаковые значения, каждый раз может быть легко дешифровано кем-то другим. Это зависит от того, для чего используется ваша база данных, и для того, чтобы кто-то мог взломать и разоблачить данные. Google должен быть в состоянии предоставить образцы кода для вас – simon1230756

+0

, насколько я понимаю из http://en.wikipedia.org/wiki/Deterministic_encryption, что если пользователь, шифровавший данные, не является тем же самым пользователем, который расшифровывает данные (это мой случай), тогда нет утечки данных, которые могли бы дать пользователю знать, что является используемым алгоритмом, не так ли? –

Смежные вопросы