Всеки от нас поне веднъж се е сблъсквал с подобна ситуация: след дълъг избор на стоки и попълване на данните в уеб сайта, въвеждате номера на кредитната си карта, натискате „Плати“ и… виждате червен надпис „Невалиден номер на картата“. Моментното раздразнение се заменя с внимателна проверка и, разбира се, има печатна грешка – една единствена цифра, въведена неправилно. Но замисляли ли сте се как системата е разбрала това за част от секундата, без дори да се свърже с вашата банка? Отговорът не се крие в магията на високите технологии, а в една хитра математическа идея, възникнала преди повече от половин век.
Това не е някаква сложна система за сигурност или проверка в глобална база данни. Това е скромен, но изненадващо ефективен алгоритъм, наречен Luna – първата линия на защита за цифровите плащания, пример за това как прагматичният инженерен подход понякога е по-важен от математическото съвършенство.

Анатомия на числото: какво се крие зад 16-те цифри?
На пръв поглед номерът на пластмасовата карта е произволен набор от цифри. Всъщност това е строго структуриран код. Преди да разберем как работи защитата му, трябва да разшифроваме неговата структура.
Първата цифра е кодът на платежната система. Така например 4 винаги е Visa, 5 е Mastercard, 6 е Discover или Maestro, а 2 е руската система „Мир“.
Следващите 5-7 цифри идентифицират банката издател, която е издала картата. Това позволява на системата да разбере с коя финансова институция трябва да се свърже, за да потвърди транзакцията.
Следващите цифри (до последната) формират уникалния номер на вашата сметка в банката.
Последната цифра е специална. Тя няма нищо общо с банката или сметката. Това е цифрата за проверка или „контролната сума“. Нейната стойност се изчислява въз основа на всички предишни цифри по специално правило – същият алгоритъм Luna. Нейната единствена задача е да потвърди, че цялото число е въведено без обичайните грешки.
Танцът на числата: как работи алгоритъмът Luna

Алгоритъмът е патентован от инженера на IBM Ханс Питър Луна през 1960 г. и е изумително прост. Той може да бъде извършен дори с молив върху хартия. Нека си представим хипотетичен номер на карта: 4275 8318 0246 137_. Трябва да изчислим последната, 16-та цифра.
Изхвърляме мястото за последната, контролна цифра. Получаваме: 4275 8318 0246 137.
Започваме отдясно и удвояваме всяка втора цифра: (7), 3→6, (1), 6→12, (4), 2→4, (0), 8→16, (1), 3→6, (8), 5→10, (7), 2→4, (4).
Сега най-интересното: всички резултати трябва да се сумират. Но ако удвояването води до двуцифрено число (например 12, 16 или 10), ние събираме неговите цифри (1+2=3, 1+6=7, 1+0=1).
Нека съберем всички обработени и необработени цифри:4 + (4) + 7 + (1+0) + 8 + (6) + 1 + (1+6) + 0 + (4) + 4 + (1+2) + 1 + (6) + 7 = 4+4+7+1+8+6+1+7+1+7+0+4+4+3+3+1+1+6+7 = 63.
Сега трябва да намерим такава контролна цифра, че като се прибави към 63, сумата да стане кратна на 10. Най-близкото такова число е 70. Следователно контролната цифра е 7 (защото 63 + 7 = 70).
Пълният номер на картата е 4275 8318 0246 1377. Ако сега потребителят сбърка поне една цифра или размени две съседни цифри, много е вероятно общата сума да престане да се дели на 10 и системата незабавно ще генерира грешка.
Инженерен компромис: защо „доброто“ е победило „перфектното“?

От математическа гледна точка алгоритъмът Luna не е съвършен. Той улавя преобладаващата част от входните грешки: грешка в едната цифра и транспониране на две съседни цифри. Както показва практиката, тези два типа грешки представляват почти 90% от всички човешки грешки. Тя обаче има „сляпо петно“: тя няма да забележи, ако размените 0 и 9 (или 9 и 0), тъй като техният „принос“ към крайната сума е един и същ.
През 1969 г. холандският математик Якобус Верхоф предлага свой алгоритъм, който е математически безупречен. Той улавя всички единични грешки и всички пермутации на съседните цифри, включително злополучната двойка 09/90. Изглежда, че това е идеалният кандидат за замяна. Но светът на финансите остана верен на алгоритъма на Луна. Защо?
Отговорът се крие в понятието за инженерен компромис.
- Простота и бързина. Алгоритъмът на Ханс Луна изисква минимални изчислителни ресурси. За компютрите от 60-те години на миналия век това е от решаващо значение. Алгоритъмът на Верхоф, базиран на по-сложни математически структури (диедрични групи), изисква повече изчисления.
- „Достатъчна ефективност“. Защо да усложняваме системата в името на улавянето на грешка, която е изключително рядка, когато настоящото решение вече се справя с огромното мнозинство от реалните проблеми? Разходите за прилагане на по-сложен алгоритъм не се изплащат от незначителното увеличение на надеждността.
- Наследяването. По времето, когато е въведено решението на Верхоф, алгоритъмът Luna вече е широко приет. Преминаването на цялата световна финансова инфраструктура към новия стандарт би било колосално скъп и сложен проект.
Историята на Луна и Верхоф е класически пример за това как в реалния свят побеждава най-прагматичното, а не най-съвършеното решение.

Невидимият страж: икономика и психология на грешката
Важно е да се разбере ключовата роля на алгоритъма Luna във финансовата екосистема. Той не е система за сигурност. Той не предпазва от измамници, които знаят или са генерирали правилния номер на картата. Неговата работа е валидиране на данните, а не удостоверяване на потребителя.
Представете си какво би било без него. Всеки път, когато направите печатна грешка, грешното ви искане би се изпращало през цялата верига от посредници до вашата банка. Това са:
- Разходи за време. Транзакцията щеше да отнеме няколко допълнителни секунди, за да се върне накрая с отказ.
- Финансови разходи. Всяка подобна проверка струва на търговеца пари (такси за обработката).
- Натоварване на системата. Милиони погрешни заявки всеки ден биха създали безсмислен трафик и биха натоварили сървърите на банките.
Алгоритъмът на Луна работи като евтин и бърз филтър от страна на търговеца и дори във вашия браузър. Той филтрира „известните откази“, преди да се задейства скъпоструващият процес на реалната проверка. Това спестява време, пари и нерви на всички участници. Преминаването на теста на Luna не означава, че картата съществува и че в нея има средства. Но неуспехът ѝ недвусмислено казва: този номер е безсмислен.
Следващия път, когато се сблъскате с моментна грешка при въвеждането на номера на картата, не бързайте да се ядосвате. Усмихнете се и си спомнете за този елегантен и скромен математически трик – невидим пазител, който вече повече от 60 години безшумно върши работата си, правейки нашия цифров свят малко по-сигурен.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!