Кіріспе
Құпия мәннен құпия кілттерді шығаратын функция. Криптографияда кілт туындыту функциясы (KDF) — бұл құпия мәннен, мысалы бас кілт, пароль немесе құпия сөз тіркесінен бір немесе бірнеше құпия кілттерді туындытатын криптографиялық алгоритм, ол псевдорандомдық функцияны қолданады (әдетте криптографиялық хэш функциясы немесе блок шифры). KDF-тер кілттерді ұзарту үшін немесе қажетті форматтағы кілттерді алу үшін пайдаланылуы мүмкін, мысалы, Diffie–Hellman кілт алмасуының нәтижесінде алынған топтық элементті AES-пен пайдалануға болатын симметриялық кілтке түрлендіру үшін. Кілті бар криптографиялық хэш-функциялар — кілт туындыту үшін қолданылатын псевдорандомдық функциялардың танымал мысалдары.
In cryptography, a key derivation function (KDF) is a cryptographic algorithm that derives one or more secret keys from a secret value such as a master key, a password, or a passphrase using a pseudorandom function (which typically uses a cryptographic hash function or block cipher). KDFs can be used to stretch keys into longer keys or to obtain keys of a required format, such as converting a group element that is the result of a Diffie–Hellman key exchange into a symmetric key for use with AES. Keyed cryptographic hash functions are popular examples of pseudorandom functions used for key derivation.
Тарих
Бірінші қасақана баяу (кілт созу) парольге негізделген кілт туындыту функциясы "crypt" (немесе оның қолданба нұсқаулығындағы "crypt(3)") деп аталды және ол 1978 жылы Роберт Морриспен ойлап табылды. Ол пайдаланушы паролінің алғашқы 8 символын кілт ретінде пайдаланып, өзгертілген DES шифрлау алгоритмінің 25 итерациясын орындау арқылы тұрақты мәнді (нөлді) шифрлейді (онда есептеулерді өзгерту үшін нақты уақыттық компьютер сағатынан алынған 12 биттік сан қолданылады). Нәтижедегі 64 биттік сан 11 басылатын символ ретінде кодталады, содан кейін Unix пароль файлында сақталады. Бұл сол кезде үлкен жетістік болғанымен, PDP 11 дәуірінен бері процессорлардың жылдамдығының артуы "crypt" функциясына күш қолдану шабуылдарын мүмкін етті, ал жад сыйымдылығының өсуі 12 биттік тұзды жеткіліксіз етті. "Crypt" функциясының дизайны пайдаланушы паролін 8 символмен шектейді, бұл кілт кеңістігін шектейді және күшті құпиясөздерді жасауды мүмкін етпейді. Жоғары өнімділік жалпы мақсаттағы хэш-функциялар үшін қажетті қасиет болғанымен, пароль қауіпсіздігі саласындағы қолданбаларда керісінше жағдай орын алады, онда күшпен бұзуға қарсы қорғану басты мақсат болып табылады. GPU, FPGA және тіпті ASIC сияқты жаппай параллель жабдықтарды күшпен бұзу үшін кеңінен қолдану алгоритмді таңдауды одан да маңыздырақ етті, өйткені жақсы алгоритм CPU-да ғана емес, сонымен қатар қазіргі заманғы жаппай параллель платформалардың есептеу шығындары мен өнімділіктеріне де қарсы тұруы керек. Осы мақсатта bcrypt, scrypt және соңғы кезде Lyra2 және Argon2 (соңғысы Парольді Хэшлеу Бәйгесінің жеңімпазы) сияқты әртүрлі алгоритмдер әзірленді. 36 миллионға жуық пароль хэштері шабуылдаушылармен ұрланған Ashley Madison деректерінің ірі масштабты бұзушылығы парольдерді қорғауда алгоритмді таңдаудың маңыздылығын көрсетті. bcrypt хэштерді қорғау үшін қолданылғанымен (үлкен ауқымды күшпен бұзуды қымбат және уақытты көп талап ететін етті), бұзылған деректердегі есептік жазбалардың маңызды бөлігінде жылдам жалпы мақсаттағы MD5 алгоритміне негізделген пароль хэштері де болды, бұл бірнеше апта ішінде 11 миллионнан астам парольді бұзуға мүмкіндік берді. 2017 жылдың маусым айында АҚШ Ұлттық Стандарттар және Технологиялар Институты (NIST) өзінің цифрлық аутентификация нұсқаулықтарының жаңа нұсқасын шығарды, NIST SP 800 63B 3, "Өте маңызды кілттер үшін немесе өте қуатты жүйелер үшін немесе пайдаланушы сезетін өнімділік маңызды емес жүйелер үшін 10,000,000 итерация саны орынды болуы мүмкін."
"For especially critical keys, or for very powerful systems or systems where user perceived performance is not critical, an iteration count of 10,000,000 may be appropriate.”
Кілт шығару
KDF-тің бастапқы қолданылуы – кілт тудыру, құпия парольдер мен парольтіркестерден кілттерді жасау. Осы тақырыптың түрлері:
Құпия емес параметрлермен бірге ортақ құпия мәннен бір немесе бірнеше кілттерді тудыру (кейде бұл "кілттің әртараптандырылуы" деп те аталады). Мұндай қолданыс, тудырылған кілтті алған шабуылшыға кіріс құпия мәні немесе басқа тудырылған кілттер туралы пайдалы ақпаратты білуден сақтануға мүмкіндік береді. KDF сондай-ақ тудырылған кілттердің кейбір шифрлау жүйелерінде "әлсіз кілттерді" болдырмау сияқты, қажетті қасиеттерге ие болуын қамтамасыз ету үшін қолданылуы мүмкін. Көп тарапты кілт келісім протоколдарының құрамдас бөліктері ретінде. Мұндай кілт тудыру функцияларының мысалдары IEEE Std 1363 2000 стандартында анықталған KDF1 және ANSI X9.42 стандартындағы ұқсас функцияларды қамтиды. Құпия парольдер мен парольтіркестерден кілттерді тудыру (парольге негізделген KDF). Берілген кілттерден әртүрлі ұзындықтағы кілттерді тудыру. Осы мақсатта жасалған KDF-терге HKDF және SSKDF жатады. Олар қосымша опционалды "info" параметрі ретінде "info" биттік тізбегін қабылдайды, бұл тудырылған кілт материалының қосымша және контекстке қатысты ақпаратқа байланыстырылуы үшін маңызды болуы мүмкін. Кілтті созу және күшейту.
Кілтті созу және оны күшейту
Кілтті алу функциялары құпия парольдер мен пароль сөз тіркестерінен кілттерді алу үшін де қолданылады, олар криптографиялық кілттер ретінде тікелей пайдалануға қабілетсіз. Мұндай жағдайларда, кілт алу функциясын қасақана баяу ету ұсынылады, бұл пароль немесе пароль сөз тіркесіне күш қолдану шабуылына немесе сөздік шабуылына қарсы тұруға мүмкіндік береді. Мұндай қолданыс 1=DK = KDF(кілт, тұз, итерациялар) түрінде көрсетілуі мүмкін, мұнда 1=DK – туынды кілт, 1=KDF – кілт алу функциясы, 1=кілт – бастапқы кілт немесе пароль, 1=тұз – криптографиялық тұз ретінде әрекет ететін кездейсоқ сан, ал 1=итерациялар – ішкі функцияның итерациялар санына сілтеме жасайды. Туынды кілт жүйе кілті ретінде бастапқы кілт немесе парольдің орнына қолданылады. Тұздың мәні және итерациялар саны (егер ол бекітілмесе) хэштелген парольмен бірге сақталады немесе шифрланған хабарламамен ашық түрінде (шифрланбаған) жіберіледі. Итерациялар санының артуы күш қолдану шабуылының қиындығын арттырады. Итерациялар санының практикалық шегі – пайдаланушылардың компьютерге кіру кезінде немесе шифрланған хабарламаны көру кезінде байқалатын кешігуге шыдамауы. Тұзды қолдану шабуылшыларға туынды кілттердің сөздігін алдын ала есептеуге мүмкіндік бермейді. Бұл шабуылшылар мен заңды пайдаланушыларды тұз мәнін іздеу үшін күш қолдануға мәжбүрлейді. Кілтті созуды енгізген мақала осы бұрынғы техникаға сілтеме жасап, қасақана басқа атау таңдағанмен, "кілтті күшейту" термині қазір көбінесе (әрине, дұрыс емес) кілтті созуды білдіреді.