Афина шифра је моноалфабетска супституциона шифра, где се свако слово у азбуци пресликава на свој нумерички еквивалент, помоћу једноставне математичке функције и претвара назад у слово. Формула која се користи значи да се свако слово шифрује у једно друго слово и назад, што значи да је шифра у суштини стандардна супституциона шифра са правилом које регулише које слово иде коме. Као таква, има слабости свих супституционих шифара. Свако слово је шифровано функцијом , где је величина померања.

Опис Овде се слова алфабета величине прво пресликавају на целе бројеве у опсегу . Затим користи модуларну аритметику да трансформише цео број којем одговара свако слово отвореног текста у други цео број који одговара слову шифрованог текста. Функција шифровања за једно слово је

где је модул величина алфабета, а и су кључеви шифре. Вредност мора бити изабрана тако да су и узајамно прости бројеви. Функција дешифровања је

где је модуларни мултипликативни инверз модуло Тј. задовољава једначину

Мултипликативни инверз броја постоји само ако су и узајамно прости бројеви. Стога, без ограничења , дешифровање можда неће бити могуће. Може се показати на следећи начин да је функција дешифровања инверзна функција шифровања,

Слабости Пошто је афина шифра и даље моноалфабетска супституциона шифра, она наслеђује слабости те класе шифара. Цезарова шифра је афина шифра са јер се функција шифровања једноставно своди на линеарни помак. Атбаш користи .

Узимајући у обзир специфичан случај шифровања порука на енглеском језику (тј. ), постоји укупно 286 нетривијалних афинских шифара, не рачунајући 26 тривијалних Цезарових шифара. Овај број потиче од чињенице да постоји 12 бројева који су копрости са 26, а мањи су од 26 (то су могуће вредности броја ). Свака вредност може имати 26 различитих померања сабирања (вредност ); стога, постоји 12 × 26 или 312 могућих кључева. Дванаест простих бројева су: 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Овај недостатак разноликости чини систем веома несигурним када се посматра у светлу Керкхофсовог принципа.

Главна слабост шифре долази из чињенице да ако криптоаналитичар може да открије (помоћу фреквентне анализе, исцрпне претраге, погађања или на други начин) отворени текст два карактера шифрованог текста, онда се кључ може добити решавањем симултане једначине. Пошто знамо да су и релативно прости бројеви, ово се може користити за брзо одбацивање многих „лажних“ кључева у аутоматизованом систему.

Исти тип трансформације који се користи у афинским шифрама користи се и у линеарним конгруентним генераторима, врсти генератора псеудослучајних бројева. Овај генератор није криптографски безбедан генератор псеудослучајних бројева из истог разлога због којег афина шифра није безбедна.

Пример У овом примеру који приказује шифровање и дешифровање, алфабет ће се састојати од слова од А до Z, и имаће одговарајуће вредности које се налазе у следећој табели. ABCDEFGHIJKLMNOPQRSTUVWXYZ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Шифровање У овом примеру шифровања, отворени текст који треба шифровати је „AFFINE CIPHER“ користећи горе поменуту табелу за нумеричке вредности сваког слова, узимајући као 5, као 8 и као 26 јер постоји 26 знакова у азбуци која се користи. Само вредност броја има ограничење јер мора бити копроста са 26. Могуће вредности које може бити су 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Вредност за може бити произвољна све док није једнако 1, јер је ово померање шифре. Дакле, функција шифровања за овај пример ће бити . Први корак у шифровању поруке је писање нумеричких вредности сваког слова. отворени текстAFFINECIPHER 0 5 5 8 13 4 2 8 15 7 4 17 Сада се решава први део једначине, . Након што пронађете вредност за сваки знак, узмите остатак при дељењу резултата са 26. Следећа табела приказује прва четири корака процеса шифровања. отворени текстAFFINECIPHER 0 5 5 8 13 4 2 8 15 7 4 17 8 33 33 48 73 28 18 48 83 43 28 93 8 7 7 22 21 2 18 22 5 17 2 15 Последњи корак у шифровању поруке је тражење одговарајућих слова за сваку нумеричку вредност у табели. У овом примеру, шифровани текст би био IHHWVCSWFRCP. Доња табела приказује попуњену табелу за шифровање поруке афинском шифром. отворени текстAFFINECIPHER 0 5 5 8 13 4 2 8 15 7 4 17 8 33 33 48 73 28 18 48 83 43 28 93 8 7 7 22 21 2 18 22 5 17 2 15 шифровани текстIHHWVCSWFRCP

Дешифровање У овом примеру дешифровања, шифровани текст који ће бити дешифрован је шифровани текст из примера шифровања. Одговарајућа функција дешифровања је , где је израчунато као 21, а је 8. За почетак, треба написати нумеричке еквиваленте за свако слово у шифрованом тексту, као што је приказано у табели испод. шифровани текстIHHWVCSWFRCP 8 7 7 22 21 2 18 22 5 17 2 15 Сада, следећи корак је израчунавање , а затим узети остатак када се тај резултат подели са 26. Следећа табела приказује резултате оба прорачуна. шифровани текстIHHWVCSWFRCP 8 7 7 22 21 2 18 22 5 17 2 15 0 −21 −21 294 273 −126 210 294 −63 189 −126 147 0 5 5 8 13 4 2 8 15 7 4 17 Последњи корак у дешифровању шифрованог текста је коришћење табеле за претварање нумеричких вредности назад у слова. Отворени текст у овој дешифрацији је AFFINECIPHER. Испод је табела са завршеним последњим кораком. шифровани текст Ја Х Х З В Ц С З Ф Р Ц П 8 7 7 22 21 2 18 22 5 17 2 15 0 −21 −21 294 273 −126 210 294 −63 189 −126 147 0 5 5 8 13 4 2 8 15 7 4 17 отворени текст А Ф Ф Ја Н Е Ц Ја П Х Е Р

Примери програмирања Следећи Python код шифрује текст афином шифром:import string

def affine(a: int, b: int, s: str) -> str: """Prints a transposition table for an affine cipher.""" D = dict(enumerate(string.ascii_lowercase, start=0)) E = {v: k for k, v in D.items()} size = len(string.ascii_lowercase) ret = "" print(size) for c in s: N = E[c] val = a * N + b val = val % size print(f"{c}({N}) -> {D[val]}({val})") ret += D[val] return ret

affine(7, 3, "foobar")

Види још

Афина трансформација Атбаш Цезарова шифра

Референце

Категорија:Чланци са примерима Пајтон кода Категорија:Странице са непрегледаним преводима