Перед установкой проверьте, есть ли запись с теми же значениями:
if not exists (select * from Delegates d where d.FromYr = @FromYr and d.MemNo = @MemNo)
INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
Да, чисто асимметричное шифрование намного медленнее, чем симметричные шифры (как DES или AES), который является, почему реальные приложения используют гибридную криптографию: дорогие операции с открытым ключом выполняются только для шифрования (и обмен) ключа шифрования для симметричного алгоритма, который будет используемым для шифрования реального сообщения.
Проблема, которую решает криптография с открытым ключом, состоит в том, что нет никакого общего секрета. С симметричным шифрованием необходимо доверять всем участвующим сторонам для держания ключа в секрете. Этой проблемой должно быть намного большее беспокойство, чем производительность (который может быть смягчен с гибридным подходом),
Используйте OpenSSL speed
управляйте, чтобы сравнить алгоритмов и лично убедиться.
[dave@hal9000 ~]$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 26126940 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 7160075 aes-128 cbc's in 3.00s
...
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128 cbc 139343.68k 152748.27k 155215.70k 155745.61k 157196.29k
[dave@hal9000 ~]$ openssl speed rsa2048
Doing 2048 bit private rsa's for 10s: 9267 2048 bit private RSA's in 9.99s
Doing 2048 bit public rsa's for 10s: 299665 2048 bit public RSA's in 9.99s
...
sign verify sign/s verify/s
rsa 2048 bits 0.001078s 0.000033s 927.6 29996.5
На MacBook рабочий OS X 10.5.5 и сборка запаса OpenSSL, "openssl скорость" синхронизирует AES-128-CBC в 46 000 блоков на 1 024 бита в секунду. То же самое поле синхронизирует RSA на 1 024 бита в 169 подписях в секунду. AES-128-CBC является алгоритмом блочного шифрования "учебника", и RSA 1024 является алгоритмом с открытым ключом "учебника". Это - яблоки к оранжевым, но ответ: RSA очень, намного медленнее.
Это не то, почему Вы не должны использовать шифрование с открытым ключом, как бы то ни было. Вот настоящие причины:
Открытый ключ crypto операции не предназначается для шифрования необработанных данных. Алгоритмы как Diffie-Hellman и RSA были разработаны как способ обмениваться ключами для блока crypto алгоритмы. Так, например, Вы использовали бы безопасный генератор случайных чисел, чтобы генерировать случайный ключ на 128 битов для AES и зашифровать те 16 байтов с RSA.
Алгоритмы как RSA намного менее "удобны для пользователя", чем AES. Со случайным ключом блок простого текста, который Вы подаете к AES, собирается выйти случайный любому без ключа. Это - на самом деле не случай с RSA, который является---больше, чем AES---просто математическое уравнение. Таким образом в дополнение к хранению и руководящим ключам правильно, необходимо быть чрезвычайно осторожными со способом, которым Вы форматируете свои блоки простого текста RSA, или Вы заканчиваете с уязвимостями.
Открытый ключ не работает без инфраструктуры управления ключами. Если у Вас нет плана проверить открытые ключи, взломщики могут заменить своими собственными парами ключей реальные для запуска "человека в средних" нападениях. Поэтому SSL вынуждает Вас пройти rigamarole сертификатов. Блок crypto алгоритмы как AES действительно страдает от этой проблемы также, но без PKI, AES не менее безопасна, чем RSA.
Открытый ключ crypto операции восприимчив к большему количеству уязвимостей реализации, чем AES. Например, обе стороны транзакции RSA должны договориться о параметрах, которые являются числами, питаемыми к уравнению RSA. Существуют злые взломщики значений, может занять место в тихо отключить шифрование. То же идет для Diffie Hellman и еще больше для Эллиптической кривой. Другим примером является уязвимость Подделки Подписи RSA, которая произошла 2 года назад в нескольких высокопроизводительных реализациях SSL.
Используя открытый ключ доказательство, что Вы делаете что-то "необычное". Необычный точно, чем Вы никогда не хотите быть с криптографией; вне просто алгоритмов, crypto проекты контролируются и тестируются в течение многих лет, прежде чем их будут считать безопасными.
Нашим клиентам, которые хотят использовать криптографию в их приложениях, мы предоставляем две рекомендации:
Для "данных в покое", используйте PGP.В самом деле! PGP избивали больше десятилетия и считают безопасным от немых ошибок реализации. Существуют и коммерческие варианты с открытым исходным кодом его.
Для "данных в полете", используют TLS/SSL. Никакой протокол системы защиты в мире лучше не понят и лучше протестирован, чем TLS; финансовые учреждения везде принимают, что он как безопасный метод перемещает наиболее уязвимые данные.
Вот достойная рецензия [matasano.com] меня, и Nate Lawson, профессиональный шифровальщик, описал несколько лет назад. Это отвечает на эти вопросы более подробно.
Практические основанные на PKI системы шифрования используют асимметричное шифрование для шифрования симметричного ключа и затем симметричного шифрования с тем ключом для шифрования данных (сказавших, что, кто-то укажет на контрпример).
Таким образом, дополнительные издержки, наложенные асимметричными crypto алгоритмами по издержкам симметричных, фиксируются - они не зависят от размера данных, только от размеров ключа.
В прошлый раз я протестировал это, проверив цепочку приблизительно 3 сертификатов X.509 [редактирование для добавления: и данные, которые они подписывали], брали часть секунды на ARM, достигающем приблизительно 100 МГц (усредненный по многим повторениям, очевидно). Я не могу помнить как маленький - не незначительный, но хорошо менее чем секунда.
Извините я не могу помнить точные детали, но сводка - то, что, если Вы не находитесь в очень ограниченной системе или выполнении большого шифрования (как то, если Вы хотите принять как можно больше соединения SSL секунда), утвержденные NIST асимметричные методы шифрования быстры.
Возможно, можно добавить некоторые детали о проекте так, чтобы Вы получили лучшие качественные ответы. Что Вы пытаетесь защитить? От кого? Если Вы могли бы объяснить требования своей безопасности, Вы получите намного лучший ответ. Производительность не означает много, если механизм шифрования не защищает то, что Вы думаете, что это.
Например, сертификаты X509 являются промышленным стандартным способом защитить клиент-серверные конечные точки. Бронирование PGP может использоваться для обеспечения файлов лицензии. Для простоты Сцепление блоков шифра с Шифром (и хост других шифров) просто в использовании в Perl или Java при управлении обеими конечными точками.
Спасибо.
По-видимому, это 1000x хуже. (http://windowsitpro.com/article/articleid/93787/symmetric-vs-asymmetric-ciphers.html). Но если Вы действительно не работаете через большое количество данных, это не будет иметь значение. То, что можно сделать, использовать асимметричное шифрование для обмена симметричным ключом шифрования.