C, PHP, VB, .NET

Дневникът на Филип Петров


* Изтърканите бутони

Публикувано на 10 юни 2011 в раздел Математика.

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

Един ден трябваше да извърша ежеседмична доставка в тази клиника. Обикновено отивам малко преди обяд. Този път обаче закъснях и хванах обедната почивка. Всички доктори през това време отиват във ведомствения ресторант, а часове за пациенти не се записват по това време. За мое нещастие човекът от охраната също беше отишъл някъде да се разходи.

Това естествено става очевиден проблем - не само, че вече съм закъснял, а трябва да чакам още да свърши обедната почивка. А всичко на всичко трябваше да отида до един кабинет, който винаги е отворен, да оставя съответната вещ и да си тръгна. Тъй или иначе извършвам тази операция без надзор на който и да е - беше безсмислено да чакам.

В този момент си спомних, че често ми се е случвало да видя лекари, които са забравили магнитните си карти, да въвеждат четирицифрен код на допълнително устройство до вратата. Погледнах устройството и видях, че някои от цифрите на бутоните са изтъркани. И то не само някои, а точно четири от тях - 1, 4, 6 и 9. Набрах малко смелост и натиснах последователно 1469. Вратата се отвори и аз свърших работа.

Естествено подредбата на цифрите в точно този ред беше случайно попадение от първи опит. Реално всеки четири различни цифри могат да бъдат подредени по 4! = 24 възможни начина. Тоест ако "пин кода" беше избран по случаен принцип, то след изтъркването на цифрите от бутоните нормално бих имал шанс 1/24 да уцеля правилната комбинация.

Може естествено да се направят по-качествени бутони, които не се изтъркват, но проблемът с мръсните пръсти няма как да се реши тъй или иначе. Естествено най-правилният от гледна точна на сигурността избор е този "пин код" да се сменя периодично и то така, че да се изтъркват и зацапват равномерно всички бутони. Но в случая това не е направено поради ред причини - първо персонала е много (тоест усилията по разпространението на новите пин кодове са неприятни) и най-вече второ тези системи обикновено се поддържат от трети лица - фирми спечелили обществени поръчки... а ние знаем, че при обществените поръчки нещата не се правят "както трябва", а "понеже и това трябва". Обикновено фирмата инсталира системата и изчезва в небитието през финансови лабиринти, през които никой не може да я проследи.

Изправени сме пред математическа задача - трябва да използваме устройство направено от некачествена пластмаса, с некачествен печат на цифрите на бутоните и веднъж въведен четири цифрения пин код, той няма да може повече да бъде променян в бъдеще (поне до следващата обществена поръчка за нова система, след като тази се скапе и няма да има кой да я поправи). Имаме ли възможност да увеличим шансовете си и да повишим сигурността до повече от 24 възможни комбинации?

Отговорът е положителен. Вместо да избираме четири ние ще изберем само три различни цифри за формиране на четири цифрения пин код. По този начин една от цифрите ще се повтаря. "Хакерът" обаче не знае коя. Различните четирицифрени пароли, които могат да се получат от три различни цифри се оказва, че са 3.24/2 = 36 различни пароли! Очевидно намалихме шансът от налучкване с цели 50%!

Увеличават ли се шансовете при избиране на още по-малко цифри? Отговорът е отрицателен. Ако изберем само две цифри за четири цифрения пин код, то възможностите са 2.24/6 + 24/4 = 14 възможни пин кода. Ако пък изберем само една цифра, то възможният пин код ще е само един.

Задача. Дадено е устройство с "n" различни бутона за въвеждане на пин код, с които трябва да въвеждаме непроменима "k" цифрена парола за достъп. Какъв е оптималният избор за брой "r" различни символи така, че възможните комбинации от пин кодове да са най-много? Знае се, че n≥k≥r (ако k>n излизаме извън рамките на текущия проблем). Казано по-кратко: търси се r=f(n,k), за което броят възможни различни пароли да е максимален.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*