✖

Сигурност на паролата

Нападателят, който се опитва да влезе в някакво защитено с парола приложение (архив RAR с парола, имейл…), има няколко възможности да стигне до резултата, без да знае паролата. Някои от тях изискват известна доза интелигентност, съобразителност и знания, други изискват малко късмет и физическа подготовка. Така че нека първо обобщим какви възможности има нападателят.

Как да разбием нечия парола

  • Да намери този, който знае паролата (например собственика на имейла), и да я получи от него – да го придума, да го подкупи, да го набие. Този начин няма да описвам по-нататък в статията :-).
  • Да се опита да изкопчи паролата от собственика по някакъв ненатрапчив начин, например с фалшив имейл, което на професионален език се нарича фишинг. Методът се състои в това да изпратиш на собственика на акаунта имейл, в който го приканваш да ти изпрати обратно потребителско име и парола. Зависи само от теб колко достоверно ще изглежда съобщението, самата молба вероятно не би стигнала, трябва да добавиш някаква история. Често можем да се срещнем с това, че се е повредила базата данни и затова приканваме всички потребители да въведат отново паролата и името си, иначе ще им закрием пощата и т.н. Ако съобщението изглежда наистина сериозно, процентът на успех обикновено не е малък.
  • Речникова атака – изтегляме от интернет някакви пакети с най-честите пароли и ги опитваме всичките. Ако имаме късмет и собственикът има някоя по-често срещана парола, наистина лесно я получаваме. От това следва онзи основен урок – не си слагай пароли, които имат смисъл. Сложи си например паролата „ябълка“ и ти гарантирам, че първият посредствен хакер ще я разбие за няколко секунди. Това е може би най-ефективният метод, ако имаш наистина голям речник с пароли, можеш да познаеш паролата на голяма част от потребителите без по-голямо усилие.
  • Brute force е най-глупавият метод, груба сила. Състои се в опитването на всички възможни вариации на пароли, които изобщо съществуват на света. Програмата последователно съставя буквички по определен алгоритъм и опитва дали не е уцелила търсената парола. Когато я намери, запазва паролата и приключва. Този метод ще разгледаме по-нататък.

Груба сила

Програма, която използва този метод, само образува различни вариации на думи и опитва дали случайно не е уцелила паролата. Ще пресметнем колко дълго може да ѝ отнеме такова опитване.

Да предположим, че имаме парола от пет знака, която се състои само от малки букви на английската азбука (без български букви като ч, ш и т.н.). Броят на буквите на английската азбука е двайсет и шест. Сега вече лесно ще пресметнем колко различни пароли можем да построим от пет такива букви. Ще използваме вариации, тъй като редът има значение (паролата stone не е същата като notes, макар да се състои от същите букви), и освен това трябва да използваме вариации с повторение, защото буквите в паролите могат да се повтарят. И преминаваме към самото пресмятане. Формулата за работа с вариации с повторение изглежда така V―nk=nk. За n заместваме броя на буквите, от които ще избираме – броя на буквите на английската азбука, а за k заместваме броя на буквите, от които се състои паролата, в нашия случай пет. Получаваме 265, което е приблизително дванайсет милиона различни вариации. Много ли е това, или малко?

Това зависи и от това какво устройство имаме на разположение. Някоя по-стара бракма успява да направи за секунда малко сравнения, свръхмодерните компютри – десет хиляди пъти повече. В тези примери ще приемам, че компютърът успява да направи десет милиона сравнения и оценки за секунда. Вече на всеки му става ясно, че такъв компютър би разкрил петзнакова парола за две секунди, което наистина не е положителен резултат. Но не се предаваме.

Усилваме паролата

Петзнаковата парола наистина изобщо не е сигурна, някои по-разумни системи не позволяват да се избере толкова къса парола. Казва се, че паролата не трябва да е по-къса от осем знака. Нека сега пресметнем колко са вариациите за осемзнакова парола. Както в предишния случай, ще разглеждаме само малките букви на английската азбука. Заместваме във формулата и се получава 268, което е приблизително двеста милиарда вариации. Това вече е по-добро число. Компютърът би оценил всички вариации за малко под шест часа. По-добре е от предишния път, но нека видим как би нараснала силата на паролата, ако използваш и главни букви, цифри и специални знаци като долна черта, тире и т.н.

Малките букви са 26, главните също са 26, което дава общо 52 знака. Към това трябва да прибавим още 10 цифри и някакви специални знаци. Не навсякъде са разрешени всички специални знаци, затова за простота ще броя само осем специални знака, за да се закръгли броят на знаците на удобните 70. Дължината на паролата отново е осем. След заместването се получава това число: 708, което за по-добра представа е приблизително 5,8 · 1014, словом почти шестстотин трилиона вариации. Това вече е доста респектиращо число. Нашият компютър би проверил всички вариации за шестнайсет хиляди часа! Което са малко под две години. Нападателят би трябвало да има много голям късмет, за да открие паролата за някакво реално време. Освен това би трябвало да знае дължината на паролата ти, в противен случай би трябвало да провери и вариациите с по-малък брой букви.

Някои хора толкова се страхуват за данните си, че използват цифрови пароли. Тези пароли са много устойчиви на речникова атака, защото едва ли в някой речник на често използваните пароли ще има точно 41 274 390 553. За съжаление, такива пароли са устойчиви на речникова атака, но са по-малко устойчиви на brute force. Цифрите са само десет, т.е. броят на вариациите винаги е 10k. Силата на паролата се поддържа само от нейната дължина. Предишната ни осемзнакова парола с всички видове знаци имаше приблизително 5,8 · 1014 вариации. За да постигнем поне същото при цифрова парола, тя би трябвало да има петнайсет цифри, почти два пъти повече знаци. Ясно се вижда, че по-ефективно е да избереш по-къса парола, но с повече видове знаци.

Не подценявай нападателя

Нападателят може да е хитър. След като си прочел предишните редове, да кажем, че си решил да промениш сегашната си парола „limonada“ поне на „Limonada“, с което се увеличава няколко пъти броят на възможните вариации, защото нападателят вече трябва да включи в алгоритъма и главните букви. Само че нападателят може да предполага, че главната буква ще е само на първо място, защото така се помни по-лесно и не е обичайно да има главна буква в средата на думата. Затова си пише алгоритъм, който проверява всички вариации на думи с малки букви или с една главна буква в самото начало.

Първоначалната ти парола имаше сложност (сега имам предвид колко общо вариации можеше да има, ако спазим същия вид на паролата – осем малки букви) 268. Ако нападателят не мислеше, новата парола би имала сложност 528, но ако използва горе описания алгоритъм, паролата би имала сложност 52 · 267. На първото място на паролата могат да се сменят малки и главни букви, те са общо 52, а на следващите седем места могат да се сменят вече само малки букви, което е стандартна вариация с повторение.

Освен това нападателят може например да знае, че паролата ти се състои от четири букви и четири цифри, без да са разбъркани, винаги цифрите една след друга и буквите една след друга. Сложността на такава парола бихме пресметнали така: първата четворка букви има общо 264 вариации, втората четворка цифри има 104 вариации. Тези два резултата след това умножаваме: 264 · 104. Ако нападателят не знаеше дали първо са цифрите, или буквите, би трябвало да умножим предишния резултат още по две.