| Криптиране в Oracle Database 10g - част I |
| Петък, 22 Септември 2006 19:29 |
|
В криптографията под "криптиране" разбираме процеса по "разбъркването" на дадена информация, така че тя да е неразбираема без определено допълнително познание. Информацията, която разбъркваме обикновено се нарича "открит текст", а резултатът от нейното криптиране – шифрограма. Шифрограмата съдържа всичката информация от открития текст, но в неразбираем вид (поне докато не притежаваме допълнителното познание). Допълнителното познание, което често се нарича "ключ" и се използва както в процеса на криптиране, така и при декриптирането (те. получаване на открития текст от шифрограмата)1. При всеки процес на криптиране съществува алгоритъм, който ясно обяснява как да разбъркаме открития текст, така че от него да се получи шифрограма. ![]() Самият алгоритъм за криптиране, който описва прилагането на ключа към открития текст с цел получаване на шифрограмата обикновено е публично достояние. Защитата, на която се разчита е самият ключ. Колкото по-дълъг е ключът, толкова по-трудно е той да бъде налучкан. По тази причина при повечето алгоритми по-голям ключ означава по-висока сигурност (но и повече изчисления в процеса криптиране/декриптиране). Като цяло съществуват две големи групи алгоритми за криптиране: тези, които използват един и същи ключ за криптиране и декриптиране (криптография със симетричен ключ) и такива които различни ключове за двата различни процеса (криптография с асиметричен ключ). Добре е още в началото да отбележим, че Oracle Database поддържа както алгоритми и със симетрични и с асиметрични ключове. Освен алгоритъмът и дължината на ключа, за да опишем цялостно един процес по криптиране е нужно да знаем още няколко допълнителни неща – типът на алгоритъма, начинът по който се използва, как да се отнасяме с ключа и някои други подробности. Да разгледаме всичко това в контекста на възможностите на Oracle Database 10g. Алгоритми за криптиране и Oracle Database 10g Съществуват различни алгоритми за криптиране (те. различни начини за прилагане на ключа към данните за получаването на шифрограмата). В Oracle Database е включен пакет наречен DBMS_CRYPTO, който предоставя готова имплементация на алгоритмите DES, TDES, AES, RC4 и 3DES_2KEY. Последният е включен за съвместимост с по-стари версии и Oracle не препоръчва неговото използване. Нека кажем по няколко думи за всеки от достъпните алгоритми. Data Encryption Standard (DES) DES е алгоритъм разработен в началото на 70-те години и бързо се разпространява, като през 1976 е одобрен като държавен стандарт в САЩ. Към момента алгоритъмът не се счита за особено сигурен, най-вече заради малката дължина на ключа му (56 бита). Тъй като разработката на алгоритъма протича под надзора на Националната агенция за сигурност (NSA), широко разпространени са слуховете за оставена "задна вратичка" в него, така че агенцията лесно да дешифрира информация криптирана с DES. Tripple DES (TDES) TDES, наричан също така и TDEA (Tripple Data Encryption Algorithm) не е нищо повече от DES, но приложен три пъти върху открития текст. TDES е създаден след справедливо отправените критики към DES и използва 168 битов ключ (3х56 бита за трите прилагания, но поради податливост на алгоритъма към определен вид дешифрираща атака ефективността му всъщност е като от използването на 112 бито ключ). Алгоритъмът все още се използва широко в различни комуникационни решения, но тъй като изисква доста изчисления се счита за твърде бавен и обикновено се реализира хардуерно. Advanced Encryption Standard (AES) AES е съвременен алгоритъм за шифроване, стандартизиран през 2001г от Националния институт по стандарти и технологии в САЩ след 5 годишна процедура. Шифърът използва 128, 192 или 256 битови ключове. До момента на писането на тази статия няма успешна атака срещу шифъра (с изключение на атаки базирани на лоша имплементация на алгоритъма). AES се счита за достатъчно сигурен, за да се шифрова с него класифицирана правителствена информация в САЩ. Rivest Cipher 4 (RC4) RC4 е потоков шифър (който криптира открития текст знак по знак, за разлика от блоковите шифри, които работят с по-големи порции данни) широко използван в различни комуникационни протоколи като SSL и WEP. Като цяло не се счита особено сигурен заради някои успешни атаки срещу него (като например тази срещу използването му в безжичните мрежи 802.11). Режими на използване Вече споменахме, че при блоковите шифри откритият текст се криптира на равни блокове. Процесът по свързване на различните криптирани блокове може да се реализира по няколко начина. Една интересна идея например е да направим шифрования блок зависим не само от алгоритъма и от ключа, но и от предходните вече шифровани блокове. Oracle Database поддържа точно четири вида режима - CBC, CFB, ECB, OFB. Cipher Block Chaining (CBC) Режим на блоковата верига (CBC) се реализира като всеки нов блок преди шифроването си се прилага към предходния (вече шифрован блок) чрез операция "изключващо или" (XOR). За първият блок от съобщението, за който не разполагаме с предходен се използва специален блок наречен "инициализиращ вектор". Cipher feedback (CFB) Режимът с обратна връзка е почти идентичен със CBC режимът, но реализира само-синхронизиращ се потоков шифър. Тук отново се използва "изключващо или", но при този режим криптирането е на порции по-малки от размера на блока (произволен брой битове). По този начин той е подходящ при предаването на поточни данни (например мултимедия) и изобщо когато се търси ниска латентност между пристигащите и обработените данни. Electronic codebook (ECB) Режимът на електронна кодова книга е познат още като "стандартен режим на използване". При него отделните блокове нямат никаква връзка по между си. Негов голям недостатък е, че тъй като блоковете не зависят един от друг то два еднакви блока открит текст ще бъдат еднакви и след шифроването си, което може много да улесни атаките срещу шифъра. Плюс от използването на този режим е, че блоковете могат да се шифроват непоследователно (например няколко блока от началото на открития текст, после няколко от края му и така нататък) Output Feedback (OFB) Режимът с вътрешна обратна връзка е много близък до CFB, но ключовата разлика е, че блокът който се прилага с "изключващо или" към открития текст се генерира независимо както от открития така и от шифрования текст. OFB също реализира потоков шифър. Уплътняване на блоковете Тъй като при блоковите шифри открития текст се разделя на равни блокове, то можем да предположим че последният блок не винаги ще е запълнен до крайния си капацитет. Тъй като това може да доведе до лоши последици за използвания алгоритъм (който очаква пълен блок) са разработени различни техники за справяне със ситуацията. Един от подходите е празните места да се заместват с нули, но това може да помогне при атаки срещу шифъра (този който го декодира може да се досети, че крайните стойности в последния блок са нули в открития текст и да използва тази слабост по някакъв начин). Стандартът PKCS1 #5 препоръчва интересен начин за допълване и той се състои в това да запълним празните места със стойност съответстваща на броя им. Да вземем за пример 16 байтов блок, от който само 11 байта ще бъдат запълнени. Остават 5 байта излишни, затова ги запълваме със стойността 5. Ако в 8 байтов блок, останат 3 свободни позиции – запълваме ги с числото 3 и т.н. Повече информация за PKCS #5 може да се намери в RFC 2898. Oracle Database поддържа допълване както с нули, така и съгласно PKCS #5. Други технологии свързани с криптирането След като знаем различни алгоритми и техните режими на използване нека обърнем внимание на няколко допълнителни аспекта от сигурното предаване на шифрована информация. Първото, с което ще се заемем е подсигуряването на автентичността на съобщението. Криптиране и хеш функции Как да сме сигурни, че едно изпратено съобщение е автентично? За да се убедим, че то не е било неправомерно променено по пътя най-често се използва метод за изчисляване чрез хеш функции. Общо казано хеш функцията е алгоритъм, чрез който създаваме цифров отпечатък на произволен тип данни. Функцията трябва да бъде така подбрана, че да не генерира едни и същи отпечатъци за различните входни данни в допустимия за нея интервал. Иначе казано, за всички възможни входни данни, функцията трябва да генерира уникални отпечатъци. Стойностите, които се получава от хеш функцията обикновено са с фиксирана дължина. Ключовият момент при хеш функциите е, че те не са обратими. Не можем да получим входните данни на базата на цифровия отпечатък. ![]() Тъй като промяната на дори един знак във входните данни води цялостна промяна в цифровия отпечатък, в криптографията хеш функциите широко се използват най-вече за проверка на идентичността и цялостта на съобщенията. Oracle Database поддържа три криптографски хеш алгоритъма – MD4, MD5 и SHA-1. MD4 (или Message Digest algorithm 4) е алгоритъм имплементиращ криптографска хеш функция, използвана основно за проверка на интегритета. Тя генерира 128 битови (16 байта) хеш стойности. MD5 е наследник на MD4, описан подробно в RFC 1321 и гарантира, че не само две съобщения е невъзможно да получат идентични цифрови отпечатъци, но и че е невъзможно да "нагласим" някакво съобщение така, че да получим точно определен цифров отпечатък. SHA-1 е алгоритъм от цяла група известна като SHA (Secure Hash Algorithm) и разработена от Национална Агенция по Сигурност в САЩ (National Security Agency). SHA-1 генерира 160 битов отпечатък от съобщение с максимална дължина от 264 бита и използва общи принципи с MD5. Често SHA-1 се посочва за бъдещ наследник на MD5. Код за автентичност на съобщението Видяхме, че използвайки хеш функциите можем да осигурим интегритета на съобщението (т.е. да сме сигурни, че то не е променено по пътя до нас). Разбира се, винаги остава вероятността използвания хеш алгоритъм да бъде открит, съобщението променено и неговата хеш стойност да бъде преизчислена. Прикрита по този начин намеса практически става неоткриваема. За да реши този проблем в криптографията се използва т.н. "код за автентичност на съобщението" или MAC1. Идеята в случая е да изчислим някаква стойност не само на базата на съобщението, но и да използваме допълнителен секретен ключ. Този ключ притежава както изпращача, така и получателя. Ако някой промени съобщението по пътя, то той няма да може да изчисли MAC стойността, тъй като дори и да знае алгоритъма няма да притежава този допълнителен ключ. Като цяло MAC алгоритмите могат да се изграждат на базата на хеш функции (такъв пример е HMAC) или чрез алгоритми за блоково шифриране (например OMAC, или пък използващият режим на блоковата верига CBC-MAC). Oracle Database 10g поддържа два вида HMAC алгоритми, които според хеш функцията използвана от тях са именувани HMAC_MD5 (използващ MD5) и HMAC_SH1 (използващ SHA-1). Към Част II |




Коментари