Posledná zmena:  [MM/DD/RRRR hh:mm:ss]
OBSAH    ZOZNAM POMÔCOK

(TAJOMSTVÁ PRAKTICKY)

Francúzsky spisovateľ Jules Verne žil v rokoch 1828 až 1905 a napísal vyše 60 dobrodružných románov, ktoré si obľúbilo už mnoho generácií nielen mládeže, ale aj dospelých. Verneho knihy sú už vyše sto rokov stále dobre známe, obľúbené, vydávané a čítané, stali sa predmetom zberateľstva, priaznivci jeho románov sa združujú do klubov. Verneho diela sú aj na internete, v prítomnej dobe (2016) napríklad:
   https://www.digibooks.sk/show.php?id=233
   http://ld.johanesville.net/verne

Príťažlivej tajomnosti šifrovania a tajných zpráv, ktoré sú detstvu a mladosti vlastné, neodolal ani Jules Verne.
Šifrovanie priamo a veľmi konkrétne použil vo svojich románoch:
   Matej Šándor nový gróf Monte Christo (1885) - je tam mriežková (transpozičná) šifra
   800 míľ po Amazonke čiže Tajomstvo pralesa čiže Jangada (1881) - je tam substitučná šifra.

Verne ukázal spôsoby šifrovania, ktoré boli v jeho dobe známe práve tak, ako aj spôsoby "prelomenia" týchto šifier, ktoré vo svojich románoch tiež ukazuje.
Spôsoby šifrovania aj lúštenia šifier, ktoré Verne popisuje, sú verejne známe vyše 100 rokov, teda nie sú to žiadne tajnosti. Nie je to ani žiadna veda, je to jednoduché, len sa nepomýliť. Pozrime sa, ako Jules Verne šifroval pred vyše sto rokmi, vyskúšajme si to v tejto interaktívnej besede. Stačí nám papier, tužka, a hlavne: rozum do hrsti - a ak to zvládneme, potom môžeme porozmýšľať, ako si to zjednodušiť či zdokonaliť.

Tieto študijné texty a pomôcky sú podporou a doplnkom k interaktívnym besedám "Šifrujeme s Julesom Vernom", ktoré autor uskutočnil vo verejnej knižnici v Trenčíne a v Gymnáziu v Dubnici nad Váhom v roku 2016; neskôr boli autorom spôsoby šifrovania ďalej rozvíjané a texty rozširované.

OBSAH:
   
Úvod
   Substitúcia
      Podstata odolnosti substitučného šifrovania
   Transpozícia
   Kľúč
   Charakter zprávy
   Heslo
   Odolnosť
   Spoľahlivosť a programy
     Konkrétny a praktický príklad šifrovania substitúciou

   POKROČILEJŠIE ŠIFROVANIE
   NÁROČNEJŠIE ŠIFROVANIE
   KOMPLEXNEJŠIE ŠIFROVANIE
   KOMFORTNEJŠIE ŠIFROVANIE
      Odkaz@.html
   VYTVÁRANIE KĽÚČA
      Kombinovanie kľúčov
      Kombinovanie opakovaných kľúčov
      Voľba dĺžky opakovaných kľúčov pri ich kombinovaní
      Konštruovanie kľúčov
      Postupné pripočítavanie
      Samotná dĺžka kľúča nepostačuje
      Začiatok zprávy je citlivý
      Premenlivosť odvodená z kľúčov
      Superkľúč
      Autokľúč (autokláv)
      Skryté metódy kľúčov
   SPOJENIE PROGRAMU SO ZPRÁVOU
   PRAKTICKÉ ŠIFROVANIE DOKUMENTOV
      ►Programy
      Skryté metódy zpráv
      Skryté metódy šifrovania. Kombinované šifrovanie.
   Najlepšie spôsoby šifrovania

   BLOKOVÉ ŠIFROVANIE
      Transformácia reťazca (hash)
      Štandartizovaná šifra AES-256

   Výzva: Prelomte (rozlúštite) šifru!
   Ako šifroval odboj 1940
   Úvaha
   Prílohy



ZOZNAM POMÔCOK:
zobraziť zoznam
Programy na šifrovanie:
   01-Šifra Beaufort (1) - 26 znakov = len medzinárodná abeceda
   02-Šifra Beaufort (2) - 36 znakov = mezinárodná abeceda + číslice
   02V-Šifra Vigenere - 26 znakov = len medzinárodná abeceda; zašifrovanie a odšifrovanie sa robí každé samostatným postupom
   03-Šifra Beaufort (3) - s vlastnou sadou znakov (predvolená a...z-0...9)
   03p-Šifra Beaufort (3) s pevnou sadou znakov: a...z_0...9
   06-Modulárna príprava kľúčov a šifra Beaufort (3) - úprava a kombinácia 3 kľúčov v rôznych moduloch; šifrovanie Beaufort (3) s pevnou sadou znakov: a0b1c2d3e4f5g6h7i8j9k_lmnopqrstuvwxyz
   11-Komfortnejšia príprava kľúča a šifra Beaufort (3) - výber znakov (z predvoleného (ale pozmeniteľného) reťazca 1.000.000 znakov do Kľúča 1, jeho kombinácia s Kľúčom 2 a s Kľúčom 3; šifrovanie Beaufort (3) s pevnou sadou znakov: ab0cd1ef2gh3ij4kl5mn6op7qr8st9uv_wxyz, jediné okno pre text otvorený aj zašifrovaný
   Odkaz@ - veľmi jednoduchá stránka: zapísať dohodnutý kľúč, stlačiť tlačidlo a čítať rozšifrovaný odkaz
   14-Kombinácia kľúčov - program len pre prípravu veľmi dlhého výsledného kľúča kombináciou až deviatich základných kľúčov ich spočítaním postupne po jednotlivých písmenách a cyklovaním, k čomu sa samočinne ku každému písmenu výsledného kľúča pripočítavajú všetky(!) predošlé (už vytvorené) písmená výsledného kľúča; šifrovanie tu nie je (na to je vyššie dostatok iných programov), avšak s výhodou sa môže použiť aj na tvorbu dlhých nezapamätateľných hesiel pomocou niekoľkých dobre zapamätateľných slov.
   16-Šifra Beaufort s mnohorakým kombinovaním až 9 kľúčov = súčet kľúčov s predlžovaním+všetky(!) predošlé písmená -> posun a skok (program JS16); dĺžka konečného kľúča sa samočinne vytvára zhodne s dĺžkou textu.
   18-Písmeno (znak) prevedie do "ALT" + číslo.
   20-Kontrolné súčty MD5 a SHA-1.
   22-šifra AES-256
   25- Šifrovanie bežných dokumentov, 5 kľúčov, 2xposun+skok, skrývanie kľúčov.
   29v21T - Šifrovanie textov - prompt 6 kľúčov+spoločný posun+skok; autokláv, 2°.
   29v21D - Šifrovanie dokumentov - prompt 6 kľúčov+spoločný posun+skok; autokláv, 2°.
   29v25T - Šifrovanie textov prompt 6 kľúčov; samočinný posun+skok, autokláv, 2°.
29v25D - Šifrovanie dokumentov prompt 6 kľúčov; samočinný posun+skok, autokláv, 2°.
   30T - Šifrovanie textov prompt 1 kľúč, autokláv, 2°; žiaden posun ani skok.
   30D - Šifrovanie dokumentov prompt 1 kľúč, autokláv, 2°; žiaden posun ani skok.
   31T - Šifrovanie textov - prompt 1 kľúč, autokláv, 2°; vnútorne kombinovaný druhý kľúč, posun, skok.
31D - Šifrovanie dokumentov - prompt 1 kľúč, autokláv, 2°; vnútorne kombinovaný druhý kľúč, posun, skok.
   31T - z predošlého programu len javascript v textovom formáte, pre externé použitie
32T - Šifrovanie textov - prompt max. 6 kľúčov> + vnútorne kombinovaný siedmy kľúč + automatický posun + automatický skok; autokláv; 2°.
32D - Šifrovanie dokumentov - prompt max. 6 kľúčov + vnútorne kombinovaný siedmy kľúč + automatický posun + automatický skok; autokláv; 2°.
   32T - z predošlého programu len javascript v textovom formáte, pre externé použitie
34 - Superkľúč - z kľúča (ľubovoľnej dĺžky) vytvorí chaotický Superkľúč dĺžky zhruba okolo 400 znakov, pre ďalšie použitie v šifrovaní.
+35 T+D - Šifrovanie textov aj dokumentov, so Superkľúčom - max. 6 kľúčov pretvorených do Superkľúčov + vnútorne kombinovaný siedmy kľúč + automatický posun + automatický skok; autokláv; 2°.
+35 T - Šifrovanie textov, so Superkľúčom - cez prompt vkladaných max. 6 kľúčov pretvorených do Superkľúčov + vnútorne kombinovaný siedmy kľúč + automatický posun + automatický skok; autokláv; 2°.


Programy pomocné:
    Frekvenčná analýza
    08-Odstránenie diakritiky (slovenskej aj českej)
    10-Odstránenie diakritiky (Sk+Cz) + interpunkcie + medzier
    09-Text odzadu
   21-Písanie azbukou
   24-Výpis kalendára 2018

Obrázky:
   Šifrovacia tabuľka so sadou riadkov, v každom tá riadku je tá istá abeceda, len inak posunutá.
   Šifrovacia tabuľka Porta na jednoduchšie, ale menej odolné šifrovanie.
   Pomôcka pre návrh šifrovacej mriežky
   Šifrovacia mriežka - príklad vyhotovenia
   Šifrovací kotúč

Reťazce znakov:
   Chaos(01) z 26 znakov medzinárodnej abecedy spolu 10.000 znakov
   Chaos(02) z 26 znakov medzinárodnej abecedy spolu 11.111 znakov
   Chaos(03) z 26 znakov medzinárodnej abecedy spolu 21.249 znakov
   Chaos(04) z 26 znakov medzinárodnej abecedy spolu 25.299 znakov
   Chaos(05) z 26 znakov medzinárodnej abecedy spolu 38.496 znakov
   Chaos(06) z 26 znakov medzinárodnej abecedy spolu 120.551 znakov
   Chaos(07) z 26 znakov medzinárodnej abecedy spolu 1 033 312 znakov
   Chaos(08) "voda kalná"     reťazec nedefinovanej dĺžky (okolo 300.000 znakov)
   Chaos(09) milión znakov medzinárodnej abecedy    reťazec z milióna znakov, nie sú tam žiadne zdvojené znaky
   10 = "Trigo"     = trigramy organizované = všetky možné trigramy (skupiny troch písmen) znakov medzinárodnej abecedy, usporiadné podľa abecedy! = žiaden chaos, žiadna náhodnosť (počet písmen teda musí byť 3x(26x26x26)x3 = 158.184)
   11 = "voda pramenitá"    reťazec pozostávajúci z troch rôznych za sebou idúcich náhodne usporiadaných postupností všetkých možných trigramov (skupín troch písmen) medzinárodnej abecedy (počet písmen teda musí byť 3x(26x26x26)x3 = 158.184)
   12 = "voda prečistená"    reťazec pozostávajúci z troch rôznych za sebou idúcich náhodne usporiadaných postupností všetkých možných trigramov (skupín troch písmen) medzinárodnej abecedy, z ktorého sú vynechané všetky monotónne trigramy (skupiny troch rovnakých písmen), takže rovnaké písmená sa za sebou vyskytujú najviac dvakrát (vynechaných písmen je čo do množstva málo nad poldruha promile)
   21 = Biblia, slovensky, len text, bez členenia je to vyše 3 MB
   22 = Biblia, slovensky, len text ASCII = písmená bez dĺžňov a mäkkčeňov, ale zachované sú interpunkčné znamienka a medzery, je to vyše 3 MB
   23 = Biblia, slovensky, len znaky ASCII = písmená bez dĺžňov a mäkkčeňov, tiež bez interpunkčných znamienok a bez medzier, je to vyše 3 MB
   24 = Biblia, slovensky, znaky ASCII ale v opačnom poradí (odzadu písané), písmená bez dĺžňov a mäkkčeňov, tiež bez interpunkčných znamienok a bez medzier, je to vyše 3 MB

Príklady:
   konkrétny a praktický príklad šifrovania substitúciou

(Koniec zoznamu pomôcok)





Úvod

Táto stránka a jej pripojené aj odkazované súčasti obsahujú zábavné šifrovanie bez akýchkoľvek záruk, obsah nemusí byť v úplnosti preskúšaný (chyby sú možné), podstatou je spôsob popísaný už Julesom Vernom pred vyše sto rokmi.

Kto potrebuje teóriu, alebo históriu či prehľad rôznych druhov šifrovania, pozrie si to inde. Tu v zásade nejde o šifrovanie elektronických dát (napr. digitálnych fotografií, a pod.), ale o šifrovanie napísaných zpráv. Šifrujeme zprávu, aby bola nezrozumiteľná každému okrem určených osôb. Šifrovanie = zašifrovanie + odšifrovanie. Spôsobov šifrovania je mnoho. Tu sú použité len niektoré - čo najúčinnejšie, čo najjednoduchšie, čo najlepšie zapamätateľné a opakovateľné, čo najmenej náročné na pomôcky - pre náš cieľ čo najlepšieho praktického šifrovania nemáme dôvod sa zaoberať tými ostatnými. Šifrujeme zprávu, teda najmä text.

Toto verneovské šifrovanie je vždy možné robiť ručne (papier, tužka, hlava), ale môžu (nemusia) sa použiť mechanické pomôcky, prípadne aj počítač, avšak pre toto šifrovanie nie je potrebné pripojenie na internet, ba ani netreba nič inštalovať, netreba žiadne vonkajšie programy.
K tejto internetovej stránke sú odkazmi pripojené aj použiteľné programy (pozrieť "Zoznam pomôcok") na samostatných neveľkých internetových stránkach, ich súčasťou sú aj šifrovacie programy napísané v ("klientskom") programovacom jazyku javascript bežiace len na tej jednej stránke bez výmeny údajov s okolím, o čom sa užívateľ v prípade potreby môže ubezpečiť (a vlastnými silami spoľahlivo zabezpečiť) načítaním (ešte lepšie aj stiahnutím-uložením na harddisk svojho počítača) stránky, potom internet odpojiť fyzicky od počítača (vytiahnúť ethernetový kabel z počítača; pri bezdrôtovom pripojení vypnúť prívod el. energie do modemu či routera ) a ďalej pokračovať v činnosti na už načítanej a teraz odpojenej stránke podľa svojej potreby. Užívateľ môže tiež nazrieť do otvoreného prístupného zdrojového kódu stránky a sám sa presvedčiť, že sú v ňom použité len príkazy na miestne spracovanie (nie je ich veľa a poľahky si ich vyhľadá na rôznych internetových stránkach) ale žiadne na posielanie údajov von z počítača (napr. príkaz "post",...).

Tu nejde o rozlúštenie cudzích šifier. Tu ide o dobré zašifrovanie vlastných zpráv, aby ich (ideálne) nemohli rozlúštiť nepovolaní. Použijeme to na naše skautské hry, ale aj v občianskom živote, napríklad na heslá; dnes už šifruje každý, aj gógle, tak prečo nie aj my.
Toto šifrovanie je symetrické (súmerné) = odšifruje sa opačným postupom ako sa zašifrovalo. (Asymetrické šifrovanie tu nie je, robí sa pomocou počítača.)
Toto (substitučné) šifrovanie je prúdové (nie blokové) = šifruje sa od začiatku ku koncu jeden znak za druhým bez zmeny ich poradia, každý znak samostatne.

Šifrujeme tak, že znaky tvoriace zprávu nahradíme inými tak, aby to nebolo čitateľné (napr. korbdpg) = substitúcia (náhrada).
Šifrujeme tiež tak, že znaky tvoriace zprávu poprehadzujeme tak, aby to nebolo čitateľné (napr. bleich = chlieb) = transpozícia (premiestnenie).
Ak sa nepoužije aj substitúcia aj transpozícia (teda ak je použitá len jedna z nich), je šifrovanie menej odolné proti (nežiadúcemu) rozlúšteniu. Toto obzvlášť platí pri použití krátkeho kľúča, a ešte viac, ak je kľúčom slovo.
Substitúcia je v popredí šifrovania a ak sa použije dlhý chaotický kľúč, niekedy býva substitúcia použitá samotná. Tu sa zaoberáme takmer výlučne substitúciou.
Na šifrovanie zprávy treba spôsob (metódu) a utajený kľúč.
Spôsob nemusí byť nutne utajený. Spôsob šifrovania obvykle nemeníme. Pre úspešné odšifrovanie je nevyhnutné použiť presne ten istý spôsob šifrovania a presne tú istú sadu znakov, ktorými bola zpráva zašifrovaná!
Kľúč musí byť utajený. Opakované použitie toho istého kľúča znižuje odolnosť šifrovania voči (nežiadúcemu) rozlúšteniu.

Nestačí prečítať si a povedať "aha, to už viem" - treba prax: opakovane zašifrovávať aj odšifrovávať. To, čo som neurobil, neviem.

Použité názvoslovie si nerobí nárok na jedinečnosť ani na rýdzo odbornú správnosť.

Pre lepšie porozumenie uveďme hneď spočiatku, že kľúč, heslo a kód sú tri rozdielne veci:
     Kľúč je utajený rad znakov (reťazec), obvykle písmen, prípadne aj číslic, ktorý sa priamo použije v procese šifrovania (=zašifrovania aj odšifrovania). Ideálne sa kľúč použije len jeden raz na zašifrovanie a jeden raz na odšifrovanie, potom sa zničí. Ideálne je kľúč rovnako dlhý ako zpráva na ktorú sa použije ...
     Heslo je utajený rad znakov (reťazec), obvykle písmen a číslic, ktorým sa potvrdzuje oprávnený prístup (obvykle k službám alebo zariadeniam), obvykle sa heslo používa opakovane, ale nepoužíva sa priamo v procese šifrovania.
     Kód alebo Kódovanie je (obojstranne) jednoznačný konkrétny a neutajovaný (verejný) spôsob prevodu čísel (v dvojkovej alebo inej sústave) na znaky (a naopak: znakov na čísla), ktorý sa používa v oblasti počítačov (historicky sa používal aj v telegrafii (Morse kód), a pod.)  Kód sa ale v inej súvislosti rozumie tiež obsah počítačového programu (postupnosť príkazov).

Číslice sú znaky, ktorými zapisujeme čísla.
Znaková sada = sada znakov = (abeceda, +číslice, ... +iné znaky...).


Prípadného premýšľavého čitateľa prosím, aby mal na pamäti, že táto stránka vznikala postupne od r. 2016 a s jej postupným rozširovaním počas nasledujúcich rokov sa rozširovalo aj myslenie autora v tejto téme, takže on sám sa už na začiatky pozerá inak a s kritickým odstupom, ale na (časovo náročné) prepracovanie obsahu niet dosť životného času, ani niet dychtiacich čitateľov a každé prepracovanie obsahu je po istom čase prekonané zmeneným pohľadom. Niekedy aj z rôznych príčin opakujem.

Výmena názorov zvykne dať nové podnety, trebárs aj vlastné. Nikoho takého tu niet. Aj preto so smútkom myslím na môjho dávneho krajana, spolužiaka, potom kolegu a najmä priateľa z mladosti Ing. Ivana Poláka, ktorý sa ako študent zaujímal o matematiku konečných čísel (Kemeny, Snell, Thompson); mal hĺbavú dušu, a zo svojich nápadov, ktoré si písal do zošita, skromne prezrádzal len máločo. Možno on (možno nie) by sa aspoň kúsok prínosne zviezol s touto témou. Z Ivanovho maličkého synčeka Miška, s ktorým chodil hádzať kamene do Váhu, a ešte ako celkom malého ho učil základy programovania, sa vraj po rokoch stal zdatný programátor. Škoda Ivana, život ho akosi nešťastne zomlel, nedožil sa ani štyridsiatky, ani konca režimu na ktorý sme vtedy spolu frflali. Na Ivana myslievam občas, keď sem píšem.



Substitúcia (náhrada znakov)
- jej slabinou je neskryté poradie znakov, z čoho pri nedodržaní tu uvedených zásad možno usudzovať na obsah až do takej miery, že (najmä ak je kľúč kratší než zpráva, použitý opakovane a netvoria ho náhodé znaky) sa šifra niekedy dá rozlúštiť. Výhodou (nemonotónnej) substitúcie je, že pozmeňuje charakteristiky jazyka, najmä častosť (frekvenciu) výskytu jednotlivých písmen.
Pri substitúcii sa obvykle ako základ používa abeceda (vo všeobecnosti sada znakov), ktorá môže mať poradie znakov (písmen) obvyklé (="zrovnaná abeceda") alebo rozhádzané (obvykle podľa nejakého kľúča; zvláštnym prípadom je "reciproká abeceda" = znaky v obrátenom poradí). Tu používame len zrovnanú medzinárodnú abecedu. Pre odolnosť substitučnej šifry je oveľa dôležitejší kvalitný kľúč než poradie písmen v použitej abecede.

Podstatou substitúcie je náhrada každého jednoho znaku (písmena) iným znakom (písmenom), ale nie stále tým istým; náhradu určuje kľúč. Kľúč určuje, o koľko miest v poradí je náhradné písmeno posunuté voči pôvodnému (=aditívne šifrovanie). Môžeme to vnímať napr. ako pripočítanie (alebo odpočítanie) poradových čísel znakov. (Boli by možné aj iné operácie modulárnej aritmetiky nad poradovými číslami písmen abecedy.) Pre odolnosť substitučnej šifry nie je podstatné, čo od čoho (kľúč, text) pripočítame alebo odpočítame, ale podľa toho sa od seba odlišujú niektoré spôsoby šifrovania (Beaufort, Vigenere, ... =historické názvy). Zvláštnym prípadom substitúcie je taký spôsob (Beaufort), že pre zašifrovanie aj odšifrovanie sa použije presne rovnaký postup (teda nie opačný). Obdobne, ale na dvojkovej úrovni (Boole-ova algebra), ktorá sa tu na internetovej stránke v javascripte (ani ručne) prakticky nedá použiť, to robí logická funkcia XOR použitá na kľúč a zprávu.

Ak označíme:
   A = otvorený text (tiež "OT" alebo "T", zrozumiteľný text, vstupuje do zašifrovania)
   K = kľúč (pre zašifrovanie aj pre odšifrovanie, tiež "C")  Pozor!-nie "heslo"-to je čosi iné-pozrieť nižšie.
   Z = zašifrovaný text (tiež "V" = výsledok, výstup zo zašifrovania, teda šifrový text, tiež "ŠT")
potom princíp jednotlivých spôsobov šifrovania je:
   Beaufort: K - A = Z  (rovnaký postup na zašifrovanie aj na odšifrovanie)
   Vigenere: A + K = Z  (odšifrovanie opačným postupom: A = Z - K )
   Beaufort - varianta: A - K = Z  (odšifrovanie opačným postupom: A = Z + K )

Počítačom zašifrovať alebo odšifrovať substitúciou je možné samočinne s použitím niektorého počítačového programu, ktorý podľa zadaného kľúča posúva jednotlivé znaky otvoreného textu (t. j. písmená abecedy a prípadne použité iné znaky). Jestvuje mnoho programov na šifrovanie.
Tu nižšie sú dostupné niektoré šifrovacie programy, ktoré pre svoju činnosť potrebujú len internetový prehliadač (internet však môže byť odpojený!), teda ani nie sú závislé na operačnom systéme, sú už v svojom princípe "multiplatformné"; sú napísané v programovacom jazyku Java script a "bežia" len vo vašom počítači na (internetovej) stránke htm či html. Ešte raz zdôrazňujem: nie je potrebné pripojenie na internet, teda ak si príslušnú internetovú (htm či html) stránku stiahnete do vášho počítača (obvykle je to možné súčasným stlačením kláves "Ctrl" a "S", ponúkne sa jej uloženie - záleží na vašom použitom internetovom prehliadači).
Tieto šifrovacie programy sa líšia spôsobom šifrovania (Beaufort, Vigenere = vysvetlené vyššie) a sadou použiteľných znakov, ktorá je na začiatku uvedená; tiež je tam vysvetlená podstata použitého šifrovania a postup šifrovania spolu s použitou šifrovacou tabuľkou tak, aby použité samočinné šifrovanie bolo možné v prípade potreby urobiť aj ručne s rovnakým výsledkom.
Programy sa líšia tiež tým, že v niektorých je pre šifrovanie vložených znakov potrebné ťuknúť na tlačidlo, v iných tlačidla niet a šifrovanie prebieha priebežne hneď po vložení znakov; programy sa tiež líšia spôsobom naprogramovania, to všetko však pre použitie programu nie je podstatné.

   01-Šifra Beaufort, 26 znakov = len medzinárodná abeceda

   02-Šifra Beaufort, 36 znakov = mezinárodná abeceda + číslice

   02V-Šifra Vigenere, 26 znakov = len medzinárodná abeceda zašifrovanie a odšifrovanie sa robí každé samostatným postupom



Ručne zašifrovať alebo odšifrovať substitúciou je možné s použitím niektorej z týchto pomôcok:
   Šifrovací kotúč
   Šifrovací valec
   Šifrovacia tabuľka so sadou riadkov, v každom tá riadku je tá istá abeceda, len inak posunutá
   Šifrovacia tabuľka Porta na jednoduchšie, ale menej odolné šifrovanie


Podstata odolnosti substitučného šifrovania s použitím ideálne dokonalého kľúča (dlhý ako zpráva, náhodné znaky) spočíva v tom, že poskytuje ľubovoľné množstvo možností odšifrovania a teda aj variant otvoreného textu, pričom niet podkladu pre rozhodnutie, ktorá varianta je tá správna.
Ukážeme to na príkladoch nižšie; použijeme šifru Beaufort 26 znakov (K=A+Z). Ukážeme, že zašifrovaný text môže skrývať ľubovoľný text, podľa toho, aký je zvolený kľúč. Keďže nemáme kritérium, podľa ktorého by sme určili, ktorá z možností otvoreného textu je správna, uvidíme, že hlavným problémom pre "nepriateľa" nie je rozlúštiť šifru, ale z veľkého počtu možností rozlúštenia určiť tú správnu možnosť, napríklad:

Zašifrovaný text:
   aopnrvmhkubpdkgfmxlsjhakmbz
môže napríklad skrývať zprávu:
   vsetkojeprezradeneujdidousa
(ak je kľúč  vgtgbjvlzlfoukjjzbfbmpdygtz )

ale:
ten istý zašifrovaný text:
   aopnrvmhkubpdkgfmxlsjhakmbz
tiež môže ukrývať celkom inú zprávu:
   vyhralsommilionpridzapijeme
(ak je kľúč  vmwergevwgjalytudforjwitqnd )

alebo v tom istom zašifrovanom texte
môže byť ukrytá ľubovoľná iná zpráva,
ak sa použije iný kľúč...

Dokonca zašifrovaný text môže vyzerať ako otvorený:
   horelalipkahorelapodnoupana
z čoho pri použití kľúča:
   kcjxlldwbnemsbxarxrpvdibopt
dostávame celkom iný (skutočný) otvorený text:
   dostalsomdefektpridmipomoct

Z uvedeného vidíme okrem iného, že aj keď písmená kľúča trebárs nie sú dokonale náhodne vybraté, predsa to v tomto prípade "nepriateľovi" pri lúštení nepomôže, pretože nebude mať podľa čoho rozhodnúť, ktorý kľúč je ten jediný správny zo všetkých, ktorý dáva ten správny otvorený text (a ostatné možné otvorené texty nie sú tie správne).


Transpozícia (premiestnenie znakov)
sama osebe nie príliš ukrýva obsah zprávy, pretože neraz z použitých znakov, bárs poprehadzovaných, možno usúdiť na obsah zprávy, najmä z číslic.
Okrem toho málo zakrýva charakteristiky jazyka.
Transpozícia sa obvykle robí pomocou tabuľky zostavenej na základe dohodnutého hesla.

Transpozíciu možno urobiť aj šifrovacou mriežkou.
   Pomôcka pre návrh šifrovacej mriežky je tu.
   Šifrovacia mriežka - príklad vyhotovenia mriežky 6x6 - jeden štvorček je pre jeden znak; bledosivé okraje dookola v šírke jednoho štvorčeka sú použité iba pre lepšiu mechanickú pevnosť papierovej mriežky a nie sú podmienkou; bodka hore je pomôcka pre orientáciu mriežky, lebo mriežka sa otáča postupne do 4 polôh. Mriežku možno použiť dvomi spôsobmi: buď vpisovaním, alebo čítaním písmen.


Kľúč
Kľúč musí byť utajený. Opakované použitie toho istého kľúča znižuje odolnosť šifrovania voči (nežiadúcemu) rozlúšteniu. Najmä na kľúč použitý pri substitúcii sú vysoké nároky:
- kľúč nesmie byť kratší než zpráva
- poradie znakov kľúča musí byť úplne náhodné (nepredvídateľné) z čoho vyplýva, že aj početnosť výskytu jednotlivých znakov v kľúči bude rovnaká, a nepriamo tiež, že sada znakov použitých v kľúči musí zodpovedať spôsobu šifrovania a teda aj znakovej sade otvoreného textu (obvykle to znamená, že obidve sady sú zhodné)
- kľúč musí byť utajený všetkým okrem oprávnených používateľov
- kľúč musí byť oprávneným používateľom k dispozícii len na čas, kedy s ním pracujú - to znamená, že (1) zatiaľ nepoužité kľúče musia byť ochránené aj pred ich prečítaním, a (2) všetky vyhotovenia použitých kľúčov treba po ich použití (aj u odosielateľa aj u príjemcu) ihneď zničiť (zničiť ako kľúč, čo nie nutne znamená napr. vytrhnúť stránku z knihy a spáliť ju a popol rozmrviť - mohlo by postačovať zničiť adresu kľúča, čo napríklad môže byť identifikácia knihy a strany; v prípade elektronického nosiča znaky (reťazec) kľúča prepísať ľubovoľnými inými znakmi, potom prípadne aj vymazať (samotné vymazanie nestačí)).

Ak kľúč výnimočne nie je taký dlhý ako šifrovaný text, musí sa kľúč predĺžiť na dĺžku šifrovaného textu, čo sa obvykle robí najjednoduchšie: viacnásobným opakovaním kľúča (sú možné aj iné, zložitejšie spôsoby). Počtom opakovaní (krátkeho) kľúča však klesá odolnosť šifrovania proti (nežiadúcemu) rozlúšteniu. Ideálny kľúč obsahuje náhodne vybraté znaky, lebo ak z predošlej časti kľúča možno usudzovať na jeho nasledujúcu časť, znižuje to odolnosť šifrovania proti (nežiadúcemu) rozlúšteniu (takže kľúč nesmie obsahovať zrozumiteľné slovo).

Kľúče sa dajú vytvárať generátorom náhodných znakov; ťažkosti sú s ich utajením, dopravou, uschovaním, zničením po použití.
Je možný aj iný spôsob: dlhé a quasináhodné kľúče je možné odvodzovať od bežných, ľubovoľne dlhých otvorených textov, z bežných zdrojov (kníh, časopisov, ... - či už papierových, alebo elektronických) na ktorých sa dohodne, s pomocou dohodnutých pravidiel (napríklad: ktorá kniha, ktorá strana, ako vyberať - napr. brať z textu každé druhé (alebo tretie, štvrté, ... tridsiate...) písmeno). Toto je možné naviac prešifrovať (trebárs aj kratším, príp. aj jednoduchším) druhým (prípadne aj tretím, štvrtým...) kľúčom (ktorý je prípadne možné aj zapamätať alebo skryte poznačiť). Na to je obzvlášť výhodné použiť samočinné šifrovanie (program). Pri takomto spôsobe sa kľúč vytvorí bezprostredne pred jeho použitím dohodnutým spôsobom s dohodnutými premenlivými parametrami, pre ktorých utajenie platia pochopiteľne tie isté zásady ako pre kľúč; výhodou je ich menšia veľkosť a tým menšia nápadnosť s lepšou možnosťou utajenia.
Platí, že zrozumiteľné zašifrované nezrozumiteľným (kľúčom) je nezrozumiteľné - toto je s výhodou možné použiť pre vytváranie kľúčov.
Jestvuje aj množstvo spôsobov na predlžovanie krátkeho kľúča, nie je ťažké si nejaký vymyslieť (napr. opakovanie, opakovanie čiastočné, opakovanie so zmenou dĺžky, opakovanie s posunom, pripočítanie, autokláv OT, ...).
Zvláštnym prípadom je vytvorenie kľúča dlhého ako zpráva, zo samotného textu zprávy prešifrovaním (nie nutne veľmi dlhým) (quasi)náhodným kľúčom, čo však vyžaduje zvláštny spôsob odšifrovania, ktorým sa tu teraz nejdeme zaoberať.
Pre vytvorenie kľúča sú taktiež možné (v časti o substitúcii už vyššie spomenuté) iné matematické operácie, to však je už tiež nad rámec tohoto textu.
Pravdaže, toto všetko má do (ideálnej) náhodnosti znakov ďaleko, ale znemožňuje to slovníkový útok a iné pokusy o rozlúštenie to sťažuje až prakticky znemožňuje, ako je prakticky ukázané príkladmi uvedenými vyššie na konci textu o substitúcii.

Na zistenie početnosti (častosti) výskytu jednotlivých znakov medzinárodnej abecedy v ľubovoľnom texte, teda aj v kľúči, možno použiť tento počítačový program:
    Frekvenčná analýza

Na rôzne šifrovacie pokusy alebo na odvodenie vlastného kľúča možno napríklad použiť aj tieto chaotické reťazce znakov - iste, ideálna náhodnosť tam v postupnosti asi nie je, rozdelenie znakov však je pomerne vyrovnané, nie je tam významnejšia zákonitosť:
   Chaos(01) z 26 znakov medzinárodnej abecedy spolu 10.000 znakov
   Chaos(02) z 26 znakov medzinárodnej abecedy spolu 11.111 znakov
   Chaos(03) z 26 znakov medzinárodnej abecedy spolu 21.249 znakov
   Chaos(04) z 26 znakov medzinárodnej abecedy spolu 25.299 znakov
   Chaos(05) z 26 znakov medzinárodnej abecedy spolu 38.496 znakov
   Chaos(06) z 26 znakov medzinárodnej abecedy spolu 120.551 znakov
   Chaos(07) z 26 znakov medzinárodnej abecedy spolu 1 033 312 znakov

alebo:
   08 = "voda kalná"   reťazec nedefinovanej dĺžky (okolo 300.000 znakov)
   09 = Milión znakov medzinárodnej abecedy - verzia 09    reťazec z milióna znakov, nie sú tam žiadne zdvojené znaky (monotónne bigramy)
   10 = "Trigo"     = trigramy organizované = všetky možné trigramy (skupiny troch písmen) znakov medzinárodnej abecedy, usporiadné podľa abecedy! = žiaden chaos, žiadna náhodnosť (počet písmen teda musí byť 3x(26x26x26)x3 = 158.184)
   11 = "voda pramenitá"    reťazec pozostávajúci z troch rôznych za sebou idúcich náhodne usporiadaných (=poprehadzovaných) postupností všetkých možných trigramov (skupín troch písmen) medzinárodnej abecedy (počet písmen teda musí byť 3x(26x26x26)x3 = 158.184)
   12 = "voda prečistená"    reťazec pozostávajúci z troch rôznych za sebou idúcich náhodne usporiadaných postupností všetkých možných trigramov (skupín troch písmen) medzinárodnej abecedy, z ktorého sú vynechané všetky monotónne trigramy (skupiny troch rovnakých písmen), takže rovnaké písmená sa za sebou vyskytujú najviac dvakrát (vynechaných písmen je čo do množstva málo nad poldruha promile)




Charakter zprávy
Zpráva je text. Ak šifrujeme len jej písmená - čo s ostatným?
Veľké či malé písmená sa dovtípime - ani telegrafia (Morseova abeceda) ich nerozlišovala, a dorozumenie fungovalo.
Bodka za vetou - možno použiť slovo "stop".
Medzery medzi slovami: buď vynechať (text bude neprerušovaný) alebo medzeru nahradiť písmenom čo najmenej používaným - napríklad "x". Ak chcem mať "x" výnimočne v texte, napíšem ho pre rozlíšenie dvakrát za sebou, napr. "texxt".
Číslice: buď vypísať slovom, alebo použiť spôsob používaný kedysi (-40r.) vo výpočtovej technike = ako znak písmenovo-číslicovej zmeny použiť písmeno čo najmenej používané - napríklad "Q" (nepárny výskyt je zmena z písmen na číslice, následný párny výskyt je zmena z číslic na písmená), a písmená použité medzi nepárnym a párnym "Q" interpretovať ako číslice vyjadrujúce ich poradové číslo v práve používanej abecede - napríklad 2016 by sme takto zapísali "QBJAFQ". Ak chcem mať "Q" výnimočne v texte, napíšem ho pre rozlíšenie dvakrát za sebou, napr. "qquasimodo".

Pre užívateľa subjektívne azda najviac vnímanou vlastnosťou textu (okrem písmen) sú medzery medzi slovami, až potom diakritika (dĺžne, mäkkčene, ...) a ostatná interpunkcia (bodky, čiarky) ako aj odlíšenie veľkosti písmen. Tieto vlastnosti textu sú pre počítačové spracovanie podstatné, pretože počítač v svojom najhlbšom základe spracúva a ukladá len dva stavy, ktoré sa interpretujú ako dvojkové číslice, ktorými zapisuje čísla vyjadriteľné v ľubovoľnej číselnej sústave (najčastejšie dvojkovej, osmičkovej, desiatkovej, šesťnástkovej), a tie potom užívateľovi interpretuje, v prípade textu cez použité kódovanie (=prevod medzi číslami a znakmi) ako znaky textu. Používa sa však viacero kódovaní, obvykle sa nelíšia v znakoch medzinárodnej abecedy, ale často sa líšia v znakoch iných. Pre našu jazykovú oblasť sú to najmä kódovania CP 852, Win1250, UTF-8, ISO 8859-2.
S počítačovým kódovaním prišla aj nejednoznačnosť niektorých znakov, ktorú najlepšie vysvetlíme na príklade znaku "vodorovná čiarka", ktorý bol na klávesnici mechanického písacieho stroja jediný a každý mu dobre rozumel. S počítačovým kódovaním znakov prišlo na svet (z istého pohľadu nešťastné) zmnoženie znaku vodorovnej čiarky v jeho slovných "obmenách": pomlčka, rozdeľovník, spojovník, mínus,... (naviac ešte podobná podčiarka), z ktorých každá si presadila svoj vlastný kód, teda sa z nich stali odlišné znaky, hoci stále to zostáva len vodorovná čiarka...
Podobne je to aj s úvodzovkami: okrem "našich" (hornej a dolnej) sú tu americké (obidve len horné), navyše francúzske aj ruské (šipkové), prípadne tiež anglické (každá má len jednu čiarku). Ani bodky nie sú na tom lepšie: okrem tradičnej bodky a dvojbodky, počítače už majú naviac prinajmenej trojbodku.
Aby komplexnosť veci bola čitateľovi ešte viac priblížená, uveďme ešte, že číslice sa cez použité kódovanie niekedy síce interpretujú ako znaky, ale v iných prípadoch aj ako príkazy (typicky LF + CR, a iné ...) alebo môžu mať prázdny význam, a toto všetko sa čitateľovi nezobrazuje ako znak, teda to priamo nevidí, takže by sa to v zašifrovanom texte ani nemuselo preniesť (záleží od spôsobu prenosu).
Ďalšia okolnosť je, že rôzne programy podľa svojho určenia spracúvajú znaky nie celkom rovnako, obvykle inak spracujú znak "písmeno", ale inak znak "medzera", a podobne (nehovoriac o už zmienených príkazoch).
Spomenuté odlišné kódovanie a odlišné spracovanie znakov vnáša do celého procesu šifrovania rôznosti, ktoré z princípu nemožno spracovať rovnako.
Keďže pri klasickom súmernom prúdovom šifrovaní posúvame znaky, mohlo by sa stať, že pri použití celej sady niektorého z obvyklých kódovaní by sa niektoré písmeno zašifrovalo do niečoho, čo by bolo pre čitateľa prinajmenej čudné (napríklad čierny štvorček), nejednoznačné (nevhodne zameniteľné) alebo dokonca neviditeľné. Takto zašifrovaná zpráva by sa pri prenose mohla ľahko skresliť a tým sa stať príjemcovi nerozlúštiteľnou.
Nezabudnime tiež, že v rôznych rečových oblastiach sa často používa iná znaková sada, teda aj cudzojazyčná klávesnica počítača nemusí umožniť napísanie niektorých znakov nám obvyklých.

Východiskom z ťažkostí v našom (klasickom, teda aj ručnom) šifrovaní je použitie obmedzenej znakovej sady - len medzinárodnej (latinkou písanej) abecedy, prípadne rozšírenej o číslice, a to aj za cenu zníženia pohodlia pri čítaní (vynechanie medzier medzi písmenami, ...). Na tom sú založené aj programy dostupné z tejto stránky.
Inou možnosťou je šifrovať znaky (písmená, ...) do čísel, čo však už je nad rámec tejto stránky.

Ak je zpráva príliš krátka, síce to sťažuje jej rozlúštenie, ale z dĺžky krátkej zprávy niekedy možno usudzovať na jej obsah.
Tiež sú citlivé začiatky a konce zpráv, kde možno usudzovať na určitý opakovaný obsah (napr. oslovenie, datum, označenie odosielateľa).
V obidvoch prípadoch (ale aj v iných fázach a prvkoch šifrovania) je namieste použiť "klamače" - pridané písmená ktoré nenesú informačný obsah (tzv. "soľ"), pričom treba v konkrétnom prípade jednoznačne určiť identifikáciu klamačov - buď budú mať pevné miesto a dĺžku alebo budú zrejmé z toho, že budú bezvýznamné a ohraničené dohodnutými znakmi, napríklad "YYRSTZYY".
Ďalšia možnosť ukrytia začiatku a konca zprávy je transpozícia (premiestnenie znakov) - pozrieť vyššie.

Akákoľvek pravidelnosť (teda aj opakovanie) v kľúči alebo aj v texte(!) v zásade znižuje odolnosť proti rozlúšteniu.


Heslo>
Heslo nie je kľúč.
Kľúč sa priamo používa v šifrovacom postupe a ideálne sa použije len raz na zašifrovanie a raz na odšifrovanie, potom sa všetky vyhotovenia kľúča zničia.
Heslom sa potvrdzuje oprávnený prístup (obvykle k službám alebo zariadeniam), obvykle sa heslo používa opakovane, ale nepoužíva sa priamo v šifrovacom postupe. Požiadavky na heslo:
- veľa kombinácií - ich počet závisí na súčine (počet znakov hesla x počet znakov v použitej znakovej sade), často sa udáva požiadavka na dĺžku hesla medzi 12 až 24 znakov čo najširšej znakovej sady, ale:
- heslo sa musí dať napísať na "ľubovoľnej" klávesnici,
- heslo nesmie obsahovať známe slovo,
- znenie hesla sa nedá ľahko zapamätať (nemusí sa týkať utajenej pamäťovej pomôcky).

Šifrovanie sa dá použiť aj na vytváranie rady hesiel (napr. k rôznym internetovým službám) tak, že heslá sa vytvoria z neskrývaných zdrojov zašifrovaním každého tým istým utajeným univerzálnym kľúčom, ktorý sa zapamätá (buď priamo, alebo zapamätaným postupom z ľahko zapamätateľného textu). Pre heslá primerane platia zásady pre kľúče.

Príklad vytvorenia hesla zašifrovaním z utajeného univerzálneho kľúča a (nie nutne utajovaného) kľúčového slova:
Chcem vytvoriť prístupové heslo do schránky elektronickej pošty "snehulienka@centrum.sk". S výhodou použijem názov schránky "snehulienka" ako kľúčové slovo, ktoré neskrývam. To, čo skrývam len v mojej hlave, je univerzálna kľúčová veta: "Mor ho detvo môjho rodu kto kradmou rukou siahne na tvoju slobodu" a postup, ktorým z tej vety ktorej vyberiem písmená - napríklad posledné písmeno každého slova, čím vytvorím univerzálny (v tomto prípade opakovane používaný) kľúč: "rooououueauu". Z univerzálneho kľúča sa však uplatní toľko písmen, koľko má kľúčové slovo - teda buď sa skráti (ako v tomto príklade), alebo sa zopakuje. Heslo vznikne z textu "snehulienka" substitučným zašifrovaním (podľa tejto stránky) s použitím univerzálneho kľúča "rooououueauu", teda heslo je "zbkhadmqrqu".
V prípade potreby možno upraviť dĺžku alebo skladbu hesla, napr. na koniec ešte pridám (zopakujem) prvé písmeno, aby som zvýšil dĺžku na 12 znakov, teda "zbkhadmqrquz". Ak sa vyžadujú malé aj veľké písmená, napríklad každý nepárny znak (alebo každú samohlásku, ...a pod.) napíšem ako veľké písmeno, teda bude "ZbKhAdMqRqUz". Ak sa požadujú (aj) číslice, napríklad posledné tri znaky nahradím ich poradovým číslom v medzinárodnej abecede, teda heslo bude "ZbKhAdMqR172126".
V prípade potreby(!) možno aj ďalej rôzne odvodzovať, ale obvykle je lepšie zbytočne nekomplikovať; napríklad ak zo spomenutého poradového čísla použijem ciferný súčet, heslo by bolo "ZbKhAdMqR838"; tiež možno nahrádzať doplnkami, alebo nahrádzať reciprokou hodnotou, a pod... ale načo? - čím viac zásad na zapamätanie, tým väčšie riziko omylu či zabudnutia, takže nepreháňať nad rozumnú mieru (každý môže mať inú).


Odolnosť
Chceme šifrovať spoľahlivo, aby možnosti prelomenia šifry boli čo najmenšie. Potrebujeme dosiahnúť čo najvyššiu odolnosť šifrovania voči nežiadúcim udalostiam. Preto potrebujeme vedieť, čo by nepovolaným mohlo umožniť šifru (čo i len čiastočne) rozlúštiť.
Tu kľúčom rozumieme všetky kľúče aj ďalšie užívateľské premenné (voľby, nastavenia, hodnoty, ...činnosti, postupnosti) nevyhnutne potrebné pre jednoznačné a správne odšifrovanie, ktoré musia byť utajené všetkým okrem určených účastníkov.
Lámač šifry - útočník na šifru má nižšie uvedené možnosti.

Zistiť kľúč
akýmkoľvek spôsobom (vrátane hádnutia a skúšania - slovníkových útokov...). Stáva sa tak zväčša nezávisle od šifrovacích pomôcok, preto zabrániť zisteniu či prezradeniu kľúča je najmä v rukách užívateľov šifrovania.

Rozlúštiť zašifrovanú zprávu
za pomoci rozboru jej obsahu a súvislostí, využívajúc svoje znalosti a rôzne nedokonalosti konkrétneho šifrovania. Útočníkovi pravdaže pomôže prípadná (bárs i odhadnutá) znalosť metódy šifrovania, čo sa klasicky považuje za prijateľné (Kasiski), avšak nemusí to tak byť a mať (čo i len zčasti) utajený spôsob šifrovania iste prispeje k odolnosti šifrovania.

Zadné dvierka
môže mať každý program, ktorého vnútornú činnosť nedokážeme posúdiť v plnom rozsahu.
Z tohoto pohľadu sotva bude spoľahlivý ktorýkoľvek z internetu stiahnutý skompilovaný program bežiaci v počítači - tam je užívateľ odkázaný len na dôveru; z tejto pochybnosti vybočujú zo zdrojového kódu u užívateľa interpretované (príp. následne užívateľom skompilované) programy, čo pre bežného užívateľa-nešpecialistu umožňoval v minulosti (v DOS-e začlenený) Basic a v súčasnosti umožňuje Java Script, ktorý výlučne užívajú tieto stránky o šifrovaní. Ďalšia možnosť bez zadných dvierok je pravdaže ručné šifrovanie.

Vieryhodné popretie
súvisí s touto problematikou, pretože ak niekto prelomí šifrovanie a rozumne to dokáže vrátane rozlúštenej zprávu, sotvakto uverí, že ide o náhodu a zašifrovaná bola iná zpráva s iným kľúčom. Výnimkou môže byť len šifrovanie s použitím kľúča dlhého ako zpráva, ktorý má náhodné rozloženie znakov, a ako je vyššie ukázané na tejto stránke (v časti "Podstata odolnosti substitučného šifrovania"), môže po odšifrovaní dať ľubovoľný obsah určenej dĺžky.


Spoľahlivosť a programy
Pri vlastnom ručnom zašifrovaní aj odšifrovaní (bez počítača), najmä pri dodržaní zásad pre kľúče, sa nemusí objaviť otázka prípadného úniku zpráv "zadnými dvierkami". Táto pochybnosť je však vždy plne namieste pri počítačovom šifrovaní, otázka však je, kto každý má od "zadných dvierok" kľúč; výnimky, pri ktorých azda pochybovať netreba, sú:
1. keď si môžeme a vieme preskúmať zdrojový kód počítačového programu, a urobíme to s uspokojivým výsledkom, alebo
2. keď dĺžka ovoreného textu a dĺžka naším kľúčom zašifrovaného textu sú zhodné, pretože logika symetrického šifrovania hovorí, že (aspoň v prípade nekomprimovaných zpráv, čo z princípu budú zprávy nie dlhé) tu nie je miesto pre zadné dvierka, alebo
3. keď počítač (trvale - lebo dataloggery a keyloggery) nie je nikde datove pripojený (žiaden internet) ani inak pripojiteľný (EMG tienenie).

Pre naše hravé šifrovanie by mohlo postačovať: preskúmať zdrojový kód použitého programu, uistiť sa o zhodnej dĺžke otvoreného aj zašifrovaného textu, mať počítač (ideálne trvale) nepripojený na internet (napríklad druhý, trvale odpojený starší počítač) a nepoužívať nedôveryhodné operačné systémy (určite nie Win 10, radšej ani Win 8 ani 7, ba ani neskoršími úpravami pozmenené XP; najlepšie azda niektorý z linuxov; táto otázka operačného systému môže ísť bokom v prípade počítača trvale! odpojeného od internetu).

Dnes všetci šifrujú, len taký fukot, hlavne gógel, nuž zašifrujme si aj my - nikdy nie je neskoro mať šťastné detstvo, a chalani pri svojich hrách vždy radi šifrovali. V dvoch verneovkách našej mladosti sme sa naučili (ručnú) transpozičnú mriežkovú šifru (Matej Šándor - druhý gróf Monte Christo) aj (ručnú) substitučnú šifru typu Vigenere (800 míľ po Amazonke (Torres)). Spomínam, že aj bulharský detektív Avakum Zachov v knihe Polnočné dobrodružstvo od Andreja Guľaškiho šifruje s použitím kľúča, ktorého nositeľom je nenápadná váza. Na internete je veľa stránok venovaných šifrovaniu, napríklad aj od veterána šifrovej služby pána Janečku, on je aj autor poučnej knihy Odhalená tajemství šifrovacích klíču minulosti.
Pre vážne zašifrovanie zprávy kľúčom kratším než zpráva je po substitučnej šifre potrebné ešte prešifrovanie transpozičnou šifrou (poprehadzuje písmená) - takéto (ručné) šifrovanie (substitúcia + transpozícia) používal odboj počas druhej svetovej vojny (pozrieť nižšie - je tam príklad).

Na internete je viacero stránok so samočinným šifrovaním, tiež pozoruhodné množstvo (aj bezplatných) počítačových šifrovacích programov. Mnohé z programov šifrujú blokovo a asymetricky - to je spôsob, ktorý vykonávať ručne nie je mysliteľné. K tým programom používajúcim symetrické šifrovanie podľa mojej vedomosti nie je známy (ručný) presný (reprodukovateľný) postup - to bráni ich preskúmateľnosti aj prípadnej náhrade (či už ručnej, alebo naprogramovanej) pre prípad vzdialenejšej budúcnosti, keď by v dôsledku vývoja počítačov sa staršie programy stali nepoužiteľnými, a tým by boli stratené nimi zašifrované texty.

Kto by chcel siahnúť po inom programe, odporúčam do pozornosti:
Textový editor T602, dnes už nepoužívaný program, ktorého niektoré neskoršie verzie (... v.3.00 +) majú aj funkciu šifrovania, i keď čiastočne skrytú: prístup je v bežiacom "t602.exe" takto: Menu(F10) - Súbor - Manažér - F4(=šifruj); toto šifrovanie je obmedzené dĺžkou: zakóduje súbor dlhý max. 32770 byte - ak je dlhší, zvyšok súboru zostane nezašifrovaný; heslo sa nedá zadať dlhšie než 39 znakov - pozor, ak sa zadáva dlhšie, už sa len prepisuje posledný znak, čo ale vidno; zašifrovaný súbor má rovnakú dĺžku ako nezašifrovaný; nerozlišuje zašifrovanie a odšifrovanie = rovnaký proces. Ak by tento program niekto chcel použiť a nefungoval by v niektorom operačnom systéme, je možné skúsiť spustiť ho v prostredí simulačného programu DOSbox, ktorý je voľne dostupný na internete.

Komprimačný program, napríklad "RAR" od Eugena Rošala (Евгений Лазаревич Рошал) od r. 1993. Viaceré komprimačné programy umožňujú prístup obmedziť heslom či šifrovaním užívateľovým kľúčom. V prípade RAR sú to verzie od RAR v.2.9 a WinRAR v.3.00 - uvádza sa originálna reťazová bloková šifra, neskôr AES 128, potom 256 bit). Je to program, kde sa dĺžka voči pôvodnému textu mení, takže sa nedá usudzovať na prípadnú neexistenciu zadných dvierok. Pravdaže, vždy možno očakávať, že program má zadné dvierka, ale ak zvážime, že prípadný kľúč k nim mohol byť pôvodne v Čeľjabinsku a my sme malé ryby, nemusí to niekedy vadiť; druhá vec je, že neskôr Rošal osobne a aj jeho program sa dostali do západnej cudziny...

Oba zmienené programy, T602 aj RAR, sú peknou ukážkou obmedzenej časovej platnosti počítačových šifrovacích programov, pretože niektoré staršie verzie nefungujú pod novšími operačnými systémami; niečo sa dá vyriešiť spustením programov v "DOSbox", čím však o niečo klesne pohodlie pri používaní tých programov.

Jeden z najviac uznávaných a dlhšie nadšencami vyvíjaných voľných (asymetrických) šifrovacích programov (True crypt) pred časom bez prijateľného vysvetlenia náhle zmizol z internetu a namiesto všetkých jeho dovtedajších verzií sa zrazu objavila len jeho jediná nová náhrada; veci znalých to vedie k presvedčeniu, že azda bol posledný čo nemal "zadné vrátka", a zostávajúce dostupné ich majú všetky. (Viac vyhľadať na internete, napr. na stránkach http://truecrypt.ch, http://andryou.com/truecrypt/docs/index.php, tiež údajná náhrada "VeraCrypt".)

Starostlivo zvažovať treba zabezpečenie spoľahlivej časovej dostupnosti zašifrovaného obsahu, do čoho patrí aj posúdenie časovej použiteľnosti prípadne použitých počítačových programov, a možnosti ich prípadnej náhrady na základe 100% znalosti a samostatného úspešného overenia nimi používaných postupov.

Spoľahlivé uloženie a spoľahlivá doprava zašifrovaných zpráv sú samostatnou otázkou, ktorá už je mimo cieľa tohoto textu. Uveďme však aspoň jednoduchú možnosť, ak chceme aspoň jednoducho skryť existenciu zašifrovaného textu, je možné ho umiestniť do niektorého formátu, ktorý môže mať obsah chránený (čo i jednoduchým) heslom, to sú napríklad formáty *.pdf, tiež komprimačné formáty napr. *.zip, *.rar.


Tu je konkrétny a praktický Príklad šifrovania substitúciou




POKROČILEJŠIE ŠIFROVANIE
Prax pokročilejšieho šifrovania



Nadväzujeme na predošlú časť "Šifrovanie".
V nej sme úplne vysvetlili a ukázali základné spôsoby praktického ručného šifrovania. Tiež sme poskytli jednoduché ale postačujúce počítačové programy, ktoré ručné substitučné šifrovanie mechanizujú, majú otvorenú a preskúmateľnú krátku postupnosť pomerne dobre zrozumiteľných príkazov bez zadných dvierok a sú použiteľné v prostredí internetového prehliadača, nezávisle na operačnom systéme počítača a nepotrebujú pripojenie na internet.
Uvedené šifrovanie v zásade nahrádza jeden znak iným znakom, pričom sada použiteľných znakov je obmedzená na písmená medzinárodnej abecedy, prípadne aj číslice. Konštatovali sme niektoré úskalia, ktoré sa môžu vynoriť, ak použijeme aj ďalšie znaky.

Pre užívateľa subjektívne azda najviac vnímanou vlastnosťou textu (okrem písmen) sú medzery medzi slovami, až potom diakritika (dĺžne, mäkkčene, ...) a interpunkcia (bodky, čiarky) ako aj odlíšenie veľkosti písmen.
Tieto vlastnosti textu sú pre počítačové spracovanie podstatné, pretože počítač v svojom najhlbšom základe spracúva a ukladá len dva stavy (0, 1) a tie sa interpretujú ako dvojkové číslice, ktorými zapisuje čísla vyjadriteľné v ľubovoľnej číselnej sústave (najčastejšie dvojkovej, osmičkovej, desiatkovej, šesťnástkovej), a tie potom v prípade textu interpretuje užívateľovi ako znaky textu, a to cez použité kódovanie, čo je zaužívaný a široko používaný prevod čísel na znaky (a naopak).

Úskalie prvé.
Keďže pri klasickom súmernom prúdovom substitučnom šifrovaní posúvame znaky, mohlo by sa stať, že pri použití celej sady znakov niektorého z obvyklých kódovaní by sa niektoré písmeno zašifrovalo do niečoho, čo by bolo pre čitateľa prinajmenej čudné (napríklad čierny štvorček), alebo dokonca neviditeľné. Takto zašifrovaná zpráva by sa pri prenose mohla ľahko skresliť a tým sa stať príjemcovi nerozlúštiteľnou.
Totiž vo všeobecnosti sa používa viacero kódovaní znakov, obvykle sa našťastie nelíšia v znakoch medzinárodnej abecedy, ale často sa žiaľ líšia v znakoch iných. Aby komplexnosť veci bola čitateľovi ešte viac priblížená, uveďme ešte, že čísla sa cez použité konkrétne kódovanie niekedy síce interpretujú ako nám známe znaky, ale niektoré nie sú ani nám známe písmená, ani číslice, ale neznáme znaky, ba až jednoduché obrázky, ktoré čítať je prinajmenej rozpačité až nemožné, iné čísla sa interpretujú ako príkazy (typicky EOL, CR, EOF, ...) alebo môžu mať prázdny význam, a toto všetko sa čitateľovi v počítači nezobrazuje ako známy znak, ba v niektorých prípadoch to ani priamo nevidí, takže by sa to v zašifrovanom texte ani nemuselo preniesť (záleží od spôsobu prenosu).
Pre lepšie pochopenie uvedených tvrdení si čitateľ môže prezrieť rozmanité druhy kódovania, sú voľne dostupné na internete.
Toto sa týka substitučného šifrovania s použitím niektorého zaužívaného kódovania, a to aj ručne, aj na počítači.
Nezabudnime tiež, že v rôznych rečových oblastiach sa často používa iná znaková sada, teda aj klávesnica počítača v zahraničí nemusí umožniť napísanie niektorých znakov nám obvyklých. Toto sme už viac vysvetlili vyššie, v časti Charakter zprávy.

Úskalie druhé.
Ďalšia okolnosť je, že rôzne počítačové programy, ktoré spracúvajú text, podľa svojho určenia spracúvajú znaky nie celkom rovnako, obvykle inak spracujú znak "písmeno", ale inak znak "medzera", a podobne (nehovoriac o už zmienených príkazoch).
Na dokreslenie uveďme, že samotný koniec riadku v takýchto programoch môže byť aj "tvrdý aj "mäkký", pričom "tvrdý" sa zapisuje dvomi znakmi "EOL" a "CR", niekedy len jedným z nich, ba navyše spôsob "odriadkovania" sa v jednom a tom istom programe môže meniť.


Spomenuté úskalia (odlišné kódovania a odlišné spracovanie znakov) vnášajú do celého procesu šifrovania rôznosti, ktoré z princípu nemožno spracovať rovnako.
Uvedené platí pre počítačové programy, ktoré spracúvajú text, teda aj internetové prehliadače. Keďže naše programy sú v nich prevádzkované, platí táto okolnosť aj pre ne; to je dôvod, prečo v týchto našich programoch nemožno použiť úplnú sadu znakov (napríklad ani UTF-8, ktorá je pre internet predvolená), pretože program síce funguje, ale zašifrovanú zprávu už nemožno odšifrovať do pôvodného čitateľného stavu (to je odskúšané).

Jedným východiskom z uvedených ťažkostí v našom (klasickom, teda aj ručnom) šifrovaní je použitie obmedzenej sady znakov - len medzinárodnej abecedy, prípadne rozšírenej o číslice (teda nie zaužívaného kódovania), a to aj za cenu zníženia pohodlia pri čítaní (vynechanie medzier medzi písmenami, ...), tak ako to je v predošlej časti "Šifrovanie" a na tom sú založené aj programy dostupné tam na uvedenej stránke.

Ďalším východiskom z uvedených ťažkostí je použiť vlastnú znakovú sadu, pričom je namieste mať na mysli vyššie uvedené úskalia. V prípade použitia vlastnej sady znakovej pre zašifrovanie je pre odšifrovanie nevyhnutnou podmienkou jej presná znalosť.
Ručné šifrovanie s vlastnou sadou znakov je možné spôsobom vysvetleným na predošlej stránke "Šifrovanie" vrátane popisov pri jednotlivých programoch, šifrovacia tabuľka bude obdobná, ale bude obsahovať vlastnú sadu znakov.
Počítačové šifrovanie s vlastnou sadou znakov je možné tu nižšie dostupným šifrovacím programom:
   03-Šifra Beaufort s vlastnou sadou znakov - tu je predvolená malá medzinárodná abeceda doplnená číslicami a jediným ďalším znakom - pomlčkou, ktorá je jedným z možných oddeľovačov slov a je zároveň dobre viditeľná (na rozdiel od medzery) a prenositeľná; je to jedna z možností znakovej sady, ktorú si ale môžete ľubovoľne zmeniť (aj skrátiť, predĺžiť...).

Iným východiskom z uvedených ťažkostí je šifrovať znaky zprávy (písmená, ...) do čísel. Na to však treba použiť programy, ktoré nespracúvajú interpretované znaky (to sú všetky naše programy používané v prostredí internetového prehliadača) ale spracúvajú priamo číslelné kódy. To sú však celkom iné programy, ktoré sú spomenuté v predošlej časti "Šifrovanie".



NÁROČNEJŠIE ŠIFROVANIE
Prax náročnejšieho šifrovania



Nadväzujeme na predošlú časť "Pokročilejšie šifrovanie". V nej sme ukázali úskalia, na ktoré môžeme naraziť, ak chceme šifrovať pohodlne čitateľný text. Tam sme poskytli program, v ktorom je možné definovať vlastnú sadu znakov (abecedu), čo záujemcovi umožní zvoliť si individuálne prijateľný kompromis medzi pohodlným textom a istotou šifrovania (môže si napr. pridať diakritiku, interpunkciu, rozlíšiť veľkosť písmen). Pri tomto spôsobe počítačového šifrovania (=spracovanie textu, najmä javascript na html stránke) nemožno použiť medzery medzi slovami, ani tvorenie odstavcov ("Enter"); ručne by to síce v zásade išlo, ale použitie medzery (keďže je neviditeľná) by mohlo zapríčiniť ťažkosti pri prenose.
Zmienený program s možnosťou definovania vlastnej znakovej sady (abecedy) sa pre praktické použitie asi príliš neujme, je skôr vhodný na získanie vlastných skúseností s predkladanými tvrdeniami.
V tejto časti postytneme náročnejšie riešenie - program so šifrovaním Beaufort, v ktorom sa pri zašifrovaní vkladá slovenský text, program text upraví aj zašifruje, a po odšifrovaní dostaneme zjednodušený, ale plynule čitateľný text. Vlastnosti programu:
- vkladaný otvorený text musí byť v slovenskom jazyku, ale nesmie obsahovať "koniec riadku" (="Enter"),
- program odstráni slovenskú diakritiku a veľké písmená prevedie na malé,
- interpunkciu (čiarky, bodky, a pod.) nahradí podčiarkami, tiež
- medzery medzi slovami nahradí podčiarkami, a
- niektoré zvláštne znaky (%, §) tiež nahradí podčiarkami,
tým všetkým text prevedie do znakovej sady uvedenej nižšie, potom text zašifruje.
Kľúč sa v programe neupravuje, musí obsahovať znaky zo znakovej sady uvedenej nižšie.
Použitá znaková sada je:
   abcdefghijklmnopqrstuvwxyz_0123456789
Vyskúšajte si - to je najlepšie.
Keďže, ako sme už predtým vysvetlili, ponechanie medzier nie je dobré, ale bez nich je text zle čitateľný, je otázka, čím medzery nahradiť. V prvom príklade šifrovania sme ich nahradili malým písmenom, ktoré sa takmer nepoužíva ("x"), čo však čitateľnosti textu príliš nepomáha. Bolo by treba drobnejší ale neprehliadnuteľný znak. V medzinárodnej abecede takého niet a rozširovanie znakovej sady treba čo najviac obmedziť. Prichádzajú do úvahy podčiarka a pomlčka. Programy spracúvajú podčiarku ako iné znaky, čo je pre šifrovanie žiadúce; pomlčku spracúvajú inak, často za ňu pridávajú mäkký koniec riadku, čo môže priniesť komplikácie. Preto je tu zvolená podčiarka, hoci pomlčka by bola azda inak vhodnejšia pre vzhľad textu.
V prípade iného náhľadu na náhradu medzery je poľahky možné náhradný znak zmeniť, takéto drobné zmeny v zdrojovom kóde programu sú nenáročné a čo len trochu zbehlý užívateľ si ich môže vyskúšať urobiť aj sám.
   Program(03) je tu.



KOMPLEXNEJŠIE ŠIFROVANIE
Prax komplexnejšieho šifrovania


Viac možností týkajúcich sa kľúča.
Program je usporiadaný do modulov, z ktorých každý sa používa samostatne. V jednotlivých moduloch sú tieto možnosti úpravy kľúča:
  • AA = Odstránenie zdvojených znakov
  • A = Výber písmen z textu s voleným počiatočným posunutím a volenou dĺžkou skokov
  • B = Orezanie reťazca písmen
  • C = Kombinovanie kľúčov: základný kľúč sa kombinuje s jedným alebo dvomi ďalšími kľúčmi (spôsob: Vigenere)
  • D = Šifrovanie Beaufort (= zašifrovanie, tiež odšifrovanie) s použitím abecedy 26znakov + číslice + podčiarka
Vysvetlivky sú v programe v textoch, ale treba si ich otvoriť (= ťuknúť na "zobraziť ďalší text") - s ich znalosťou a predchádzajúcim preštudovaním a precvičením predošlých častí interaktívnej besedy "Šifrujeme s Julesom Vernom" by každému malo byť všetko jasné.
Program(06) je tu
ÿr>
KOMFORTNEJŠIE ŠIFROVANIE
Prax komfortnejšieho šifrovania



V predošlom sme poskytli, ukázali a vysvetlili viacero konkrétnych možností šifrovania textu a predovšetkým rôzne spôsoby prípravy kľúča. Program v časti "Komplexnejšie šifrovanie" umožňuje z jednotlivých modulov programu zostaviť si veľa vlastných možností konkrétneho šifrovacieho postupu.

Pre opakované časté použitie to však môže byť nepohodlné tým, že treba kombinovať jednotlivé moduly a prechádzať od jednoho k druhému, prenášajúc medziúdaje medzi modulmi pomocou schránky (Zwischenablage, clipboard, klávesy "Ctrl"+"C" (=kopírovať) a potom "Ctrl"+"V" (=vložiť)). Preto môže byť užitočné, po naučení jednoduchých základov html jazyka a javascriptu, z programov (najmä (ale nie výlučne) z programu Komplexnejšie šifrovanie) vybrať si časti (moduly) a skombinovať ich do vlastnej, dobre premyslenej, konkrétnej a nemennej pohodlne použiteľnej zostavy s pevnou postupnosťou krokov, ktorá splňuje zamýšľaný cieľ, najmä čo sa týka prípravy kľúča, pretože v tom sa ukazuje dosť veľký rozsah možností, a z nich si vybrať spôsob jediný, v konkrétnych parametroch použitia majúci tak obrovské množstvo možností, aby používateľ vnímal záruku neprelomenia svojho šifrovania.

Jedna z takýchto možných zostáv šifrovania podľa voľby autora je v programe na ďalšej samostatnej šifrovacej stránke: Program(11) je tu. Kľúč sa tu vytvára spôsobom, ktorý je kompromisom medzi (na jednej strane) jednorazovým (neopakovaným) kľúčom z náhodných znakov, ktorý nie je kratší než zpráva, a (na druhej strane) potrebou splniť tieto požiadavky pohodlnejším spôsobom. Výsledný kľúč sa vytvára (už vyššie uvedenou) kombináciou troch kľúčov (Kľúč 1, Kľúč 2, Kľúč 3). Vysvetlivky sú v programe v textoch, ale treba si ich otvoriť (= ťuknúť na "zobraziť ďalší text") - s ich znalosťou a predchádzajúcim preštudovaním a precvičením predošlých častí interaktívnej besedy "Šifrujeme s Julesom Vernom" by každému malo byť všetko jasné.

ODKAZ@.html
je ďalšou možnosťou individuálnej a do krajnosti dovedenej zvláštnej šifrovacej zostavy na internetovej stránke "html". Stránka Odkaz@.html je tu.  a je v nej už vložený odkaz ako príklad; kľúč pre jeho otvorenie sú prvé písmená slov Štúrovho hesla: "Veľa tvoriť, málo troviť a učiť sa" - teda je to šesť písmen - vyskúšajte, ale pozor! - pre vážne použitie je kľúč príliš krátky voči dĺžke zprávy!, ale pre pohodlie pri vyskúšaní bol zvolený krátky. Táto stránka je odvodená od šifrovacej stránky Komfortnejšie šifrovanie(11) jej zjednodušením a konkretizáciou.
Šifrovacia internetová stránka Odkaz@.html má tieto vlastnosti:
  • nesúmerné použitie: jednoduchosť pre príjemcu je dosiahnutá nutnosťou vložiť zašifrovaný text do zdrojového html kódu stránky Odkaz@.html u odosielateľa odkazu,
  • obsahuje jedno malé okno na vloženie kľúča (pre lepšie pochopenie nezasväteného príjemcu odkazu je tam aj neprimerané, ale navyknuté slovo "heslo"), a:
  • obsahuje jedno väčšie okno pre odkaz (zašifrovaný aj otvorený, striedavo za sebou),
  • obsahuje jedno tlačidlo "Ukáž odkaz", ktorého stlačením sa striedajú funkcie odšifrovania (pre ukázanie odkazu) aj zašifrovania (pre prípravu odkazu zašifrovaním),
  • odkaz je v zašifrovanom stave zapísaný priamo v stránke *.html (pre prípravu odkazu treba stránku otvoriť v textovom editore a zašifrovaný odkaz vložiť do zdrojového textu html stránky namiesto reťazca, ktorý sa užívateľovi ukazuje vo väčšom okne),
  • príprava odkazu (jeho zašifrovanie) sa urobí s priamym použitím tej istej stránky, lebo:
  • zašifrovaný aj odšifrovaný odkaz sa ukazujú v tom istom okne (v tom väčšom) striedavo, postupným opakovaným stláčaním (jediného prítomného) tlačidla,
  • vysvetlivky sa príjemcovi nezobrazujú, na jeho činnosť postačia tam prítomné krátke texty k oknu kľúča a k tlačidlu
  • datový obsah stránky je neveľký - stránka je malá (povedzme okolo 5 kilobyte), rýchlo sa načíta (neberúc do úvahy prípadnú závažnú veľkosť odkazu, ktorú nepredpokladám),
  • možnosť ďalšieho zjednodušenia stránky je vynechaním tlačidla, pričom na strane príjemcu postupným zapisovaním písmen kľúča by sa menil nezrozumiteľný obsah okna odkazu, čo by mohlo príjemcu zneistiť - až po vložení posledného písmena kľúča by sa odkaz ukázal správne; preto je tlačidlo ponechané, aby príjemca nebol zneistený,
  • možnosť v okne neukazovať príjemcovi zašifrovaný odkaz, ale až otvorený odkaz, tá nebola použitá, aby sa odosielateľovi zachovala jednoduchá príprava odkazu zašifrovaním na tej istej stránke.

Odkaz@.html súbor ako príloha ele pošty medzi dvomi užívateľmi poštovej služby @gmail.com má tieto vlastnosti:
1. Keď sa príloha stiahne do počítača a následne odtiaľ otvorí v internetovom prehliadači ako *.html súbor, funguje to; či je to tak otvorené, vidíme podľa toho, že v adresnom riadku prehliadača musí byť na konci názov toho súboru, vrátane koncovky "html".
2. Ak sa v prijatom "e-maili" otvorí ako "príloha" e-mailu, zobrazuje sa nie ako html súbor (t.j. v adresnom riadku nie je na konci názov toho súboru, vrátane koncovky "html"), ale ako "attachment" čo sa aj zobrazuje v adresnom riadku. V tomto prípade to nie je otvorené ako "html" súbor, teda sa nevykoná javascript v súbore obsiahnutý, ktorý zabezpečuje zamýšľanú funkčnosť, a teda odkaz sa neukáže v otvorenom stave. Toto je vlastnosť schránky elektronickej pošty.
3. Čo robiť? Použiť spôsob popísaný v bode 1 - ale pozrieť nižšie v bode 4, ako. Jedna z ďalších možností je e-mailom poslať iba hypertextový odkaz (nie súbor samotný), ktorý si príjemca stiahne alebo otvorí (pozrieť nižšie v bode 4) alebo prípadne ťuknutím na odkaz; pre lepšie pochopenie príklad odkazu: Odkaz@.html
4. Bezpečnostný rozdiel:
A.) Spôsob podľa bodu 1, v prípade ak sa z internetu (buď z prílohy e-mailu, alebo z hypertextového odkazu) stiahnutý súbor prenesie do iného počítača trvale odpojeného od internetu (žiadne fyzické pripojenie ani káblové, ani "wireless", ani emg. vyžarovaním), v ktorom sa v internetovom prehliadači otvorí ako "html" súbor, je bezpečný spôsob.
B.) Spôsob podľa bodu 3 by bol bezpečný len v prípade, že by operačný systém počítača internetovým pripojením neposkytoval smerom von žiadne údaje, o ktorých obsahu by užívateľ nič nevedel - s tým sa však vo všeobecnosti nedá počítať (prinajmenej od Win XP SP3 počnúc).
Záver: Pre bezpečné použitie takéhoto odkazu (Odkaz@.html) ako prílohy "e-mailu", napríklad pre prenos údajov do internetového bankovníctva, z hľadiska bezpečného prenosu (bezpečnosť použitého kľúča je vec iná, preberaná už predým) je bezpečný iba prípad popísaný v bode 4A.

VYTVÁRANIE KĽÚČA


Vyššie v časti "Kľúč" sme vysvetlili, že ak kľúč výnimočne nie je taký dlhý ako šifrovaný text, musí sa pri šifrovaní (ručne alebo programom) kratší kľúč použiť viacnásobne opakovane na dĺžku šifrovaného textu, čím však však klesá odolnosť šifrovania proti (nežiadúcemu) rozlúšteniu. Tomu sa v našom procese súmerného prúdového šifrovania nedá vyhnúť.

Hľadáme možnosť mať výhodu dlhého kľúča (odolnosť), ale tak, aby bol použiteľný pohodlne, teda s týmito vlastnosťami:
  • dlhý kľúč (ideálne) nie kratší než zpráva (ak nejde o život, osobne by som použil aj kľúč nie kratší než tretina zprávy, ale to je len subjektívne presvedčenie),
  • z predošlej časti kľúča nemožno usudzovať na žiadnu jeho nasledujúcu časť,
  • čo najmenej pomôcok na zostavenie kľúča - ideálne žiadne písané, aby sa dali zapamätať, prípadne poznačiť len náznakmi pre pripomenutie.

Nižšie ukazujeme niektoré možnosti, ako sa ku splneniu týchto požiadaviek priblížiť.
V tomto texte pod kombináciou kľúčov rozumieme spočítanie (cez poradové čísla písmen) niekoľkých základných kľúčov do výsledného kľúča; pod konštrukciou, kombinovaním, kľúča rozumieme nielen spočítanie, ale aj ďalšie úpravy, s použitím niekoľkých základných kľúčov do konečného kľúča.



Kombinovanie kľúčov:

Môže byť výhodným kompromisom, ako sa k niektorým uvedeným vlastnostiam kľúča priblížiť, keď rôznymi spôsobmi skombinujeme (niekoľko - tu uvedieme tri) rôzne kľúče K1, K2, K3, z ktorých sa zostaví výsledný kľúč K, ktorý sa už priamo použije pri šifrovaní.
Kombinovať kľúče je možné napríklad spočítaním kľúčov (šifra Vigenere, napr. K1 + K2 + K3 = K), čo znamená spočítať ich poradové čísla v (medzinárodnej, 26 znakovej) abecede, čo je (povedané rečou matematikov) operačná sústava s konečným počtom prvkov a definovanou operáciou (aj) spočítavania patriacou do metód konečnej (finitnej) aritmetiky, teda spočítavame modulárnym spôsobom (ako čas na ručičkových hodinkách - s cyklovaním dookola) - o to isté stále ide v celom tomto súmernom substitučnom prúdovom šifrovaní.
Kombinovať kľúče je možné aj inými matematickými operáciami než spočítavaním (s výhodou najmä násobením (v tom je aj umocňovanie), nie však delením; pochopiteľne aj odpočítavaním, to však je len zvláštny prípad pripočítavania (s opačným znamienkom)), tieto možnosti si ale ponechávame na neskoršie.

Tým však dĺžku kľúča nezväčšíme. Potrebujeme kľúč (okrem iného) ideálne taký dlhý ako šifrovaná zpráva. Preto hľadáme možnosti predĺženia kľúča. Isté možnosti ukazujeme nižšie:



Kombinovanie opakovaných kľúčov:

Pri prúdovom (postupnom) šifrovaní, ktorým sa tu výlučne zaoberáme, sa vždy v otvorenom texte, v kľúči aj v zašifrovanom texte spracúvajú postupne znaky s rovnakým poradím, a ak je kľúč kratší než zpráva, tak z podstaty tohoto druhu šifrovania nezostáva iné, než kľúč v procese šifrovania používať opakovane viacnásobne.
Prirodzene nás to vedie k použitiu tejto podstaty aj pri kombinovaní kľúčov tým, že by sme kombinované kľúče predĺžili opakovaním, a potom skombinovali do výsledného kľúča. Zistíme, že tým vzniká opakovanie rovnakých (alebo posunutých) zhlukov (skupín) písmen, podobne ako pri fotografii zloženej z obrazových bodov, v ktorej sú dva rôzne obrazové rastre, vzniká opakovanie rovnakých zhlukov (skupín) obrazových bodov = moiré. Podobné moiré môže vzniknúť aj z písmen - ukážeme to tu na príklade:

Príklad kombinácie (spočítania) dvoch kľúčov:
K1 = "voda", K2 = "zub". Napíšme ich pod seba s opakovaním a skombinujme ich - spočítajme ich poradové čísla v abecede a súčet preveďme späť na písmená výsledného kľúča K, takto:

vodavodavodavodavodavodavodavodavodavodavodavoda
zubzubzubzubzubzubzubzubzubzubzubzubzubzubzubzub

21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;...
...21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;21;14;03;00;

25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;...
...25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;25;20;01;

súčet je (modulo 26):
20;08;04;25;15;15;02;20;22;13;23;01;20;08;04;25;15;15;02;20;22;13;23;01;20;... ...08;04;25;15;15;02;20;22;13;23;01;20;08;04;25;15;15;02;20;22;13;23;01;

prevedené späť na písmená výsledného kľúča K (= K1 + K2) dostávame:
uiezppcuwnxbuiezppcuwnxbuiezppcuwnxbuiezppcuwnxb

kde bezpečne vidíme, že sa opakuje skupina prvých dvanástich znakov:
uiezppcuwnxb
a to spolu 4x za sebou - ďalším takýmto predlžovaním kľúča by sa len zvyšoval počet opakovaných dvanásťpísmenových skupín.
Každá pravidelnosť pri šifrovaní znižuje jeho odolnosť, preto aj takéto opakovanie skupín písmen je riziko, ktorému sa chceme vyhnúť čo najviac.

Dôležité:
V kombinovanom kľúči, počet znakov v opakovanej skupine znakov je najmenším spoločným násobkom počtu znakov jednotlivých kľúčov.
V príklade vyššie je to počet 4 a 3 s najmenším spoločným násobkom 12 - to je počet opakovaných písmen.



Voľba dĺžky opakovaných kľúčov pri ich kombinovaní:

Z príkladu uvedeného vyššie vidíme, že pri kombinácii opakovaných kľúčov je výhodné použiť také dĺžky kombinovaných opakovaných kľúčov (K1, K2, K3), aby spoločný násobok počtu ich znakov bol čo najväčší.
Pri takomto opakovaní kombinovaných kľúčov sa opakovaniu skupín písmen nedá úplne vyhnúť, preto je žiadúce, aby skupina opakovaných znakov bola čo najdlhšia.
V ďalších úvahách o kombinovaní kľúčov sa pre lepšiu názornosť obmedzíme na dva základné kľúče; na nich urobené zistenia primerane platia aj pre tri alebo viac základných kľúčov.
Úvahou ľahko prídeme k tomu, že:
Ak kombinujeme dva kľúče, najväčšiu neopakovateľnú dĺžku kombinovaného kľúča vytvoríme, keď počet znakov (najdlhšieho) kľúča K1 bude (čo najvyššie číslo, prednostne prvočíslo), a kľúč K2 bude o jeden znak kratší než K1.

Napríklad (ak pre názornosť zostaneme v oblasti neveľkých čísel):
ak K1 bude mať 13 znakov a K2 bude mať 12 (=13-1) znakov, dĺžka opakovania bude 156 (=13 x 12) znakov (najmenší spoločný násobok čísel 13 a 12), čo je úctyhodná dĺžka.
Keby sme mali K1 s 15 znakmi, a K2 s 10 znakmi (čo je spolu tiež 25 znakov ako v predošlej vete), bola by dĺžka opakovania 30 znakov (=najmenší spoločný násobok čísel 15 a 10), teda menej než 20% predošlého, pritom na zapamätanie sú obidva prípady rovnako dlhé!
Z toho vidíme, aké dôležité je voliť správnu dĺžku kombinovaných kľúčov.

Jedna z možností je zvoliť jeden kľúč, čiastočným(!) opakovaním ho predĺžiť na najbližšie vyššie prvočíslo - to bude K1. Z tohoto K1 odvodíme K2 tak, že z neho vynecháme prvý(!) znak. Potom K1 aj K2 kombinujeme (znakovým súčtom s opakovaním).

Príklad:
Zvolím prvé písmená prvej slohy štátnej hymny Slovenskej republiky: "ntsbhdb" (= 7 znakov(tiež prvočíslo)) a čiastočným opakovaním predĺžim na najbližšie prvočíslo 11, teda K1=ntsbhdbntsb, z toho vynechaním prvého písmena vytvorím K2=tsbhdbntsb. Ich kombináciou (znakovým súčtom s opakovaním) K1 + K2 dostávam výsledný kľúč K=
gltikeogltufuzeiqufultoavcuwtomkcuwtoavcgltiqufuzeufuzeogltiwtoavcamkcavcuwtogltuzeiqufufultikeogltomkcogcamkc
ktorý má dĺžku opakovania 110 znakov (=11 x 10) čo nie je zlý výsledok z takého ľahko zapamätateľného postupu. Pravda, ideálny nie je, lebo sa tam napríklad 3x opakuje štvorznakový reťazec "glti".


Príklad:
Základ pre tvorbu kľúča sa dohodne kľúčová veta (vymyslený citát s minimom vnútornej logiky, ale dobre zapamätateľný): Hadi, choďte domov. Ľudovít Štúr. (to je 15 a 11 znakov.)
Z kľúčovej vety urobíme dve časti, čo sa dá rôzne, ale tu uvedieme tri možnosti:
  •   Ak by sme z kľúčovej vety urobili dve časti bez opakovania, iba rozdelením kľúčovej vety, potom ideálne by po opakovaní častí a kombinovaní (dvojrozmerné pole) mal vzniknúť neopakovaný výsledný kľúč čo najdlhší; preto by mali byť takmer rovnako dlhé, ale s rozdielom dĺžky = 1 znak, pričom jedna z častí by bola prvočíslo. V tomto prípade by povedzme boli dve časti dlhé 15 a 11 znakov, z týchto čísel jedno (11) je prvočíslo, a dĺžka neopakovaného výsledného kľúča by ideálne vyšla na 15 x 11 = 165 znakov.
  •   Ak by sme z kľúčovej vety urobili dve časti s opakovaním, čo sa zdá byť výhodnejšie, tak jeden opakovaný kľúč by bola celá kľúčová veta (15 + 11 = 26 znakov) a druhý opakovaný kľúč by bola druhá časť kľúčovej vety (11 znakov). Po predlžovaní obidvoch kľúčov a ich skombinovaní by dĺžka neopakovaného výsledného kľúča ideálne vyšla na 26 x 11 = 286 znakov, čo je približne jeden-a-trištvrte-krát dlhší kľúč.
  •   Ak by sme z kľúčovej vety urobili dve časti takým spôsobom, ako v predošlom príklade (s hymnou Slovenskej republiky), potom jeden opakovaný kľúč by mal 15 + 11 = 26 znakov, druhý (zopakovanie s vynechaním prvého písmena) opakovaný kľúč by mal 26 - 1 = 25 znakov, potom po predlžovaní obidvoch kľúčov a ich skombinovaní by dĺžka neopakovaného výsledného kľúča ideálne vyšla na 26 x 25 = 650 znakov. Podstatnú úlohu tu hrá skutočnosť, že počty znakov obidvoch kľúčov nemajú spoločného deliteľa! (--> 26=2x13 25=5x5) - lebo ak by mali, potom by dĺžka neopakovaného výsledného kľúča bola menšia.
Vidíme, že posledný z uvedených troch spôsobov by mohol byť najvýhodnejší; v porovnaní s prvým spôsobom poskytne až štvornásobne dlhý kľúč.

Ohľadne dĺžok opakovaných kľúčov pri ich kombinovaní, tu je rozpis niektorých možností.




Konštruovanie kľúčov
Vyššie uvedené možnosti kombinovania kľúčov zahrnujú spočítavanie kľúčov (spôsobom Vigenere) a ich opakovanie.
Použijeme tieto (nie výlučné) možnosti kombinovania kľúčov:
  •   kľúč sa vytvorí (odvodí) ručne dohodnutým (najlepšie: zapamätateľným spôsobom), napríklad (typicky, ale nie výlučne) zo slov kľúčovej (zapamätanej či poznačenej) vety (napríklad prvé písmeno každého slova), alebo z dohodnutej strany zhodného výtlačku knihy (napríklad prvé (alebo ďalšie, či posledné, predposledné...) písmená vo (všetkých, alebo preskakovaných) riadkoch dohodnutých strán),
  •   prvý dlhý nezapamätateľný kľúč (K1) sa kombinuje (spočíta) s ďalšími, (nie nutne dlhými) zapamätateľnými kľúčmi (K2, K3, príp. aj viac),
  •   kľúč(e) možno vhodne opakovať (nevýhoda: vedie to viac či menej k cyklovaniu, teda opakovaniu skupín znakov, čo v zásade znižuje odolnosť šifrovania).

Konštruovanie kľúčov dohodnutým spôsobom dáva okrem už použitého kombinovania (spočítavania a opakovania) aj ďalšie nižšie uvedené možnosti, ktoré môžu byť s výhodou použité pre vytvorenie (skonštruovanie) kľúča s vyššou akosťou. Naďalej používame doterajší spôsob, v ktorom má Kľúč 1 (K1) prednostné postavenie voči ostatným kľúčom v tom, že je najdlhší a predovšetkým on je predmetom ďalších úprav; pravdaže, nemusí to tak byť.
Tieto spôsoby možno použiť aj na jednotlivé kľúče (K1 a ďalšie) ktoré sa ďalej kombinujú, aj na už skombinovaný (výsledný) kľúč:
Vyberanie znakov do kľúča (ručne alebo samočinne) dohodnutým spôsobom, trebárs z dohodnutého textu, s použitím parametrov (Tieto parametre používame tu ako konštanty, bárs by sa mohli používať aj premenlivé hodnoty):
"Posun" =koľko znakov od začiatku sa má vynechať - to je jednorazová operácia; a najmä
"Skok" =koľké písmeno v poradí sa má opakovane vyberať - napríklad každé druhé, či tretie, alebo dvanáste, prípadne iné v poradí; ak sa príde na koniec, skončí sa; "skok" je zo svojej podstaty opakovaná operácia; opakovanie jej dáva vyššiu účinnosť než jednorazový "posun".
Ako základ pre vyberanie znakov výhodne možno použiť napr. aj verejne dostupný (dostatočne rozľahlý) text, napríklad knihu alebo noviny či text (alebo všeobecnejšie počítačový súbor) z internetu. Príklad použitia je v tomto programe(11).

"Skok s cyklovaním kľúča" poskytuje ďalšiu možnosť konštruovania kľúča: po dosiahnutí konca sa pokračuje od začiatku. Tento spôsob poskytuje veľké možnosti a výhody, najmä zo (trebárs aj slovníkového) základu skonštruovať kľúč s väčším chaosom než je použitý základ. Takto sa rôznymi skokmi z jednoho základu dá skonštruovať viac odlišných kľúčov. Zo základu sa berú do úvahy len písmená (teda nie medzery a pod.) Namiesto dlhého vysvetľovania krátky príklad:

Príklad: základ nech je slovo "drevo", skok=3 (počítame písmená od prvého, každé tretie vypisujeme, po dosiahnutí konca pokračujeme od začiatku), dostávame reťazec "edvro", ktorý sa ďalej opakuje ("edvroedvroedvroedvro...edvroedvro...").

Príklad: základ (17 znakov) = "nikdy nie je neskoro", skok=5, dostávame 17-znakový reťazec "yeokesnnnrdjkiieo", ktorý sa ďalej opakuje. Z toho istého základu však odlišnou hodnotou dostaneme celkom iný výsledok, napríklad s hodnotou skok=7 dostávame (celkom iný) 17-znakový reťazec "ikdnneoyeijrnskeo", ktorý sa ďalej opakuje.

Operácia "skok" nemení početnosť výskytu jednotlivých znakov. Preto je užitočné používať základ s vyrovanou početnosťou znakov, ten však zo svojej podstaty musí byť dlhší než v predošlých dvoch príkladoch, ktoré sú len na objasnenie podstaty, nie sú vhodné na priame použitie.

Príklad: v javascriptovom šifrovacom programe predvolíme (=ľahko si každý užívateľ môže zmeniť) ako kĺúč reťazec 997 (=prvočíslo) znakov s vyrovnanou početnosťou znakov, ktorý použijeme ako základ pre odvodenie jednoho zo základných kľúčov.
Rozdielnymi parametrami skoku v tomto reťazci môžeme dostať 997 rôznych základných kľúčov. (Môžeme zadávať aj vyššiu hodnotu skoku, ten ale bude obsiahnutý v predošlých, pretože zo skoku sa účinne uplatní len hodnota modulo dĺžka reťazca, teda skok modulo 997.) Keď konkrétnym číselným skokom takto získaný základný kľúč skombinujeme s ďalšími (jedným či viacerými, nie nutne chaotickými) základnými kľúčmi, počet kombinácií vzrastie na hodnotu súčinu počtov ich znakov: povedzme, že kľúč K2 = zemepis, kľúč K3 = balon, potom z podstaty vychádza dĺžka neopakovaného skombinovaného kľúča až (nemusí byť, pravdaže, použitý až do konca) 997 x 7 x 5 = takmer 35 tisíc znakov, potom by sa už znaky opakovali. To by nám mohlo postačovať (úsmev).
Pravdaže, to platí pre jednu nemennú hodnotu posunu. V tomto príklade je však toľko možností posunu, koľko je znakov, teda 997. Rôznymi hodnotami posunu a rôznymi hodnotami (konštantného) skoku tak dostávame 997 x 997 = bezmála jeden milión možných základných kľúčov, ktoré môžeme použiť (spolu s ďalšími základnými kľúčmi) na vytvorenie azda uspokojivého kombinovaného kľúča.



Postupné pripočítavanie (použitie necyklovanej (nemodulárnej) operácie)
Aj keď zvolíme nepríliš krátke kombinované kľúče (napr. v príklade vyššie je to 11 a 10 znakov), síce ich kombináciou môžeme získať zaujímavú dĺžku kľúča (v tom príklade je to 11 x 10 = 110 znakov), ale stále to môže mať ďaleko k dĺžke porovnateľnej s dĺžkou rozsiahlejšieho textu, ktorý chceme zašifrovať.
Preto hľadáme možnosť zásadného predĺženia výsledného kľúča, pri zachovaní výhod kombinovaných kľúčov.
Pritom narážame na ťažkosť, ktorú spôsobuje cyklovanie pri kombinovaní kľúčov, ktoré, takisto ako samotné naše šifrovanie, používa operácie v uzavretom operačnom systéme písmen abecedy, má modulárny charakter, čo zákonite vedie k opakovaniu (bárs i s dlhou periódou). Dôjdeme preto k myšlienke, že do predĺženia kľúča treba zaviesť premennú definovanú mimo modulárneho operačného systému abecedy.
Najjednoduchšie by bolo použiť poradové číslo znaku kľúča, s ktorým by sa vykonala operácia (najjednoduchšia je sčítanie) taká, aby sa nedala jednoducho vyeliminovať. Mohli by sme zaviesť poradové číslo znaku plus posun a skok, ktoré vnášajú ľubovoľné množstvo možností a v dôsledku toho vysokú odolnosť voči prelomeniu šifrovania s takto predĺženým kľúčom. Ďalšia možnosť je popísaná ďalej.
S výhodou použijeme samočinné pripočítanie všetkých predošlých písmen kľúča ku každému jednotlivému písmenu kľúča.
Program(14) (len) pre konštrukciu veľmi dlhého konečného kľúča, kombináciou až deviatich základných kľúčov ich spočítaním postupne po jednotlivých písmenách, k čomu sa samočinne ku každému jednotlivému písmenu výsledného kľúča pripočítavajú všetky(!) predošlé (už vytvorené) písmená konečného kľúča; takýto program je dostupný tu (ale je len pre prípravu kľúča) a s výhodou sa môže použiť aj na tvorbu dlhých nezapamätateľných hesiel pomocou niekoľkých dobre zapamätateľných slov.
Ďalší program je aj pre šifrovanie aj pre konštrukciu veľmi dlhého konečného kľúča, kombináciou až deviatich základných kľúčov ich spočítaním postupne po jednotlivých písmenách, k čomu sa samočinne ku každému písmenu konečného kľúča pripočítavajú všetky(!) predošlé (už vytvorené) písmená konečného kľúča, ďalej s následným posunom a skokom, čo vytvára veľmi veľa možností konečného kľúča, pričom dĺžka konečného kľúča sa samočinne vytvára zhodne s dĺžkou textu; tento program(16) je dostupný tu. Lepší spôsob pre konštrukcie kľúča s predlžovaním nepoznám. Program tiež poskytuje šifrovanie (bežné, ale klasicky dokonalé a jednoduché) Beaufort (K=A+Z). Odporúčam oboznámiť sa a vyskúšať, bližšie vysvetlenie je v záhlaví stránky programu.
Parmetre konštrukcie kľúča je vhodné voliť premyslene; zo všetkého vyššie uvedeného je zrejmé prinajmenej to, že je rozumné voliť dĺžky jednotlivých kľúčov (1 až 9) a parametre "Posun" a "Skok" tak, aby ich číselná veľkosť bola rozdielna.


Samotná dĺžka kľúča nepostačuje
Okrem požiadavky, aby v skombinovanom (výslednom) kľúči bola skupina opakovaných znakov čo najdlhšia, ideálne taká dlhá ako zpráva samotná, treba ešte mať na pamäti aj to, aby bola dostatočne náhodná. Znamená to, aby sa z predošlej časti kľúča nedalo usudzovať na nasledujúci znak a nasledujúcu časť kľúča. Inak povedané, v prípade každého jedného znaku kľúča treba:
(1.) zachovať možnosť, aby znak mohol byť z úplnej (ničím neobmedzenej) sady znakov; tiež,
(2.) aby pravdepodobosť výberu znaku z úplnej sady znakov bola pre každý znak sady rovnaká. To je veľmi náročné. Táto vec sa však dá vidieť z dvoch strán:
• keď sa kľúč konštruuje, vtedy platí zákonitosť - ale tá vylučuje náhodnosť vo vytváraní kľúča;
• na druhej strane, ak útočník nedokáže v skombinovanom kľúči nájsť zákonitosť, z jeho pohľadu je kľúč náhodný.
Ak aj útočník v skombinovanom kľúči nedokáže nájsť zákonitosť, môže ešte skúšať všetky možnosti predpokladanej znakovej sady, všetky možnosti dĺžok kľúčov a všetky možné predpokladané spôsoby kombinácií kľúčov.
Pri konštruovaní kľúča môžeme použiť nielen rôzne matematické operácie nad jednotlivými znakmi (spočítavanie, ...), ale s výhodou tiež operácie nad poradím znakov, ktoré nemusia všetky nutne zostať v rámci modulárnej matematiky - toto je silný nástroj (pre lepšie pochopenie: môžu to byť operácie posun, skok, narastajúce (tzv. inkrementálne (teda pokračujúce, čiže nie-zakaždým-od-nuly)) pripočítavanie, a podobne, do ktorých ešte (pre dosiahnutie väčšieho množstva možností) navyše je možné zaviesť premenlivé parametre (priamo zadávané, alebo odvodené napr. od kľúča)).
Ak aj vytvoríme dlhokánsky kľúč dlhý ako zpráva, dôležité je, aby počet možností kľúča bol z pohľadu útočníka obmedzený len počtom znakov kľúča. Preto treba voliť také dĺžky kľúčov (a spôsoby konštrukcie kľúča), aby poskytovali toľko možností, na ktoré útočníkovi (v rozumnom čase) nebude postačovať výpočtový výkon.
Pre lepšie pochopenie uvediem príklad toho, čo sa nesmie stať: dopravuje sa zpráva 10.000 znakov zašifrovaná chaotickým kľúčom zhodnej dĺžky, skonštruovaným z dvoch kľúčov: "voda" a "zub" s opakovaním a ďalšími operáciami; ak útočník zistí alebo správne odhadne, že boli použité dva kľúče s počtami znakov 4 a 3, plus konkrétna metóda ich spracovania, tak potom potrebuje iba vyskúšať všetky kombinácie, a tých je 26 exp (4x3)=vyše 95 000 000 000 000 000 (v prípade slovníkového útoku ešte menej!), čo je, pravdaže, obrovské číslo, ale pri počítačovom spracovaní by to možno zvládol v rozumnom čase, a dosť pravdepodobne by aj logicky dokázal odhadnúť, ktorá z možností rozlúštenia je tá správna zpráva, ktorá má zmysel.
V tomto príklade je slabina v tom, že hoci je kľúč dlhý (ako zpráva) 10 000 znakov, čo síce umožňuje 26 exp 10 000 možností klúča, ale nevyužitých zostalo až 26 exp 9988 možností, ktoré útočník nemusel uskutočniť ale hlavne: nemusel z nich vyberať, ktorá je tá správna, lebo to by už nedokázal kvôli neohraničenému množstvu možností - postačí mu preskúšať len nepatrný zlomok (26 exp 12) zo všetkých (26 exp 10.000) možností.

Zhrnutie:
Samotná dĺžka kľúča nepostačuje - treba, aby bolo aj veľa možností kľúča (aby sa nedala vylúčiť podstatná časť možností vyplývajúcich zo samotnej dĺžky kľúča).



Začiatok zprávy je citlivý
Pri tu používaných spôsoboch "verneovského" šifrovania (Beaufort, Vigenere,...) pre odšifrovanie každého písmena zašifrovanej zprávy je len 26 možností, čo vôbec nie je veľa! - problém útočníka však spočíva v správnej kombinácii odšifrovania jednotlivých písmen, ako sme už ukázali vyššie tu .
Ak by útočník, postupne od prvého písmena zprávy pokračujúc ďalej, dokázal (logicky) z narastajúcich možností vyberať tie správne odšifrované písmená, mohol by zašifrovanú zprávu rozlúštiť. Bráni mu v tom iba (1.) chaos v kľúči a (2.) neistota vo voľbe odšifrovaných možností (zase odkazujeme na vyššie ukázané tu .
Jestvuje ešte tretia vec, ktorou útočníkovi takýto postup môžeme sťažiť, a to sú klamače - tiež "vata" či "soľ", inak povedané len výplň bez informačného významu, čiže neveľká skupina chaotických (nič neznamenajúcich) znakov, ktorú môžeme dohodnutým spôsobom použiť v podstate v hociktorej časti otvorenej či zašifrovanej zprávy, ale najmä na začiatku, lebo tam to má najväčší význam a účinnosť. Klamače (vata, výplň, soľ) sa s výhodou môžu použiť:
• na začiatku otvorenej zprávy (treba o tom vedieť, aby to neprekvapilo a nepovažovalo sa za chybu odšifrovania)
• na začiatku zašifrovanej zprávy (pred odšifrovaním ju treba odstrániť, teda musí byť vopred určená, dohodnutá jej dĺžka).




Premenlivosť odvodená z kľúčov a z otvoreného textu
V prúdovom súmernom substitučnom šifrovaní doteraz premenlivosť (transformácia) šifrovania bola založená na (nie nutne utajenom) spôsobe (metóde) šifrovania a konkrétne hodnoty premeny priamo určovali až utajené údaje (parametre), ktoré užívateľ zadával (vkladal) - to boli typicky kľúč(e), ale všeobecnejšie chápané aj iné nastavenia, napr. mechanické nastavenia v Enigme a obdobných strojoch.
Spôsob premenlivosti bol jednoznačne daný konkrétnou šifrou (metódou) a hodnotu premeny konkrétneho znaku (napr. posun v abecede) typicky určoval kľúč(e).

Možnosť prelomenia šifry sťažíme, keď k vyššie uvedenému
A) premenlivosti ktorú určuje spôsob šifrovania (metóda) - napr. Beaufort
B) premenlivosti ktorú určujú znaky (typicky písmená) jednoho či viacerých kľúčov
C) premenlivosti ktorú určujú iné (doplnkové) parametre, napríklad posun, skok, voľba abecedy, ... (mechanické nastavenia (kotúčov...) v Enigme, ...)
ešte pridáme premenlivosť odvodenú z užívateľských dát, ako uvádzame nižšie:
= 1.= premenlivosť odvodenú z otvoreného textu, čo je:
závislosť hodnoty premeny konkrétneho znaku aj(!) aj hodnotou jednoho či viac znakov otvoreného textu, čo je známy autokľúč či autokláv; tu zdôraznime výhodu autokľúča založeného nie na jednom znaku, ale na jeho pridaní (kumulácii) k predošlým hodnotám, pričom pod pridaním môžeme rozumieť (obvykle) prípočet, ale(!) aj iné operácie (napríklad súčin, ...). Túto premenlivosť je užívateľsky výhodné zahrnúť do šifrovacej metódy.
= 2.= premenlivosť doplnkových parametrov šifrovania odvodenú zo znakov (jednoho či viac) kľúčov, čo je
závislosť hodnoty premeny konkrétneho znaku aj(!) číselnými hodnotami (kódmi) znakov kľúčov, vhodne skombinovanými, ktoré môžu určovať napríklad počiatočnú hodnotu pre následné kumulovanie kľúčov, a/alebo začiatok cyklovaného načítavania kľúčov ako tiež hodnotu skoku v tomto cyklovaní, počet cyklov, tiež iné parametre šifrovacej metódy.

Možnosť prelomenia šifry ešte viac sťažíme, keď k vyššie uvedeným možnostiam ešte vhodne(!) pridáme logické operácie, ktoré do konkrétnej metódy šifrovania vnesú rozhodovacie procesy - vetvenie, ktoré zvyšuje neurčitosť premeny znaku, ktorá klasicky bola "otvorený znak skombinovaný so znakom kľúča dáva zašifrovaný znak". Vhodnosť použitia uvedeného má samozrejmú podmienku možnosti použitia pri zašifrovaní aj pri odšifrovaní. Z uvedeného sa predovšetkým ponúka možnosť použitia logických operácií v predpríprave (trebárs každého) kľúča, ktorý sa následne použije v (za- aj od-) šifrovaní.
Túto metódu sme konkrétne použili v (javascriptovom) (pod-)programe "Superkľúč" (č.34, podrobnejšie pozrieť nižšie) určenom pre praktické použitie, ktorý zahrnuje:
= α = premenlivosť uvedenú vyššie pod bodom 2. (= opakované cyklovanie po zadanom kľúči, s premenlivými parametrami odvodenými z kódov znakov kľúča, ide najmä o počet cyklov a dĺžku skoku),
= β = kumuláciu: pridanie predošlej hodnoty, pridanie čísla cyklu, s mat. operáciami súčtu a násobenia,
= γ = logickú operáciu porovnania rozhodujúcu o násobení (=podmienečné násobenie) a tiež logickú operáciu porovnania kódov susedných znakov rozhodujúcu o ďalšom použití alebo vyradení znaku (podmienečné vyradenie znaku).
= δ = kaskádové opakovanie spracovania kľúča, pričom počet opakovaní je odvodený z kódov znakov kľúča.
Metóda transformácie použitá v programe Superkľúč je jednosmerná, čo je dôsledok použitia násobenia (+ operácia modulo) aj podmienečného vyradenia znaku. Dĺžka vytvoreného Superkľúča je viacnásobkom dĺžky vloženého (vstupného) kľúča, čo je dôsledok opakovaného cyklovania skokmi po kľúči, pričom dĺžka Superkľúča je premenlivá, čo je dôsledok premenlivosti uvedenej v bode "2." vyššie.
Program Superkľúč je ako podprogram použitý v javascriptovom šifrovacom programe (35).




Superkľúč
Superkľúč je môj (autorov) vlastný spôsob (metóda), ktorým sa z (užívateľom vloženého) kľúča (t.j. reťazca znakov, najmä písmen) vytvorí (skombinuje) Superkľúč pre ďalšie použitie pri šifrovaní. Jednotlivé písmená sa nevratne nahradia inými bez viditeľnej súvislosti. (Pochopiteľne, znaky (písmená) sa spracúvajú prostredníctvom ich číselných kódov.) Podstatou tvorby Superkľúča je spracovanie vloženého kľúča jeden znak za druhým v cykloch tak, že spracúvaný znak kľúča sa násobí hodnotou výstupu predošlého cyklu (kumulatívne), pričom počiatočná hodnota je odvodená od vloženého kľúča (napr. súčet jeho znakov), a načítanie kľúča sa cyklicky opakuje s počtom cyklov závislým aj od (znakov) kľúča. Pre dosiahnutie väčšej rôznorodosti sa do cyklu vkladajú aj premenné odvodené od písmen kľúča aj čísla cyklu ako aj konštanty (nemenné aj odvodzované od kľúča), a to v matematických operáciách spočítanie, násobenie (teda aj umocňovanie) a logická operácia porovnanie. Takto vytvorený superkľúč sa potom použije ako základ (nový kľúč) pre ďalšie opakované spracovanie tým istým spôsobom v kaskáde, pričom počet týchto opakovaní nie je konštantný a je závislý aj na znakoch kľúča. Vo vytváraní Superkľúča použité parametre sú premenlivé, odvodzované aj od zadaného kľúča (aj od jeho znakov, aj od jeho dĺžky). Počet znakov (písmen) vytvoreného Superkľúča nie je konštatný, je premenlivý, je odvodený predovšetkým zo samotných písmen kľúča a iba málo závisí od počtu znakov (písmen) kľúča. Superkľúč máva aj viac stovák znakov (písmen), bez ohľadu na to, aká je dĺžka vloženého kľúča.
Program na vytvorenie Superkľúča (bez šifrovania) je tu dostupný na týchto stránkach pod číslom 34.
Superkľúč je zabudovanou súčasťou šifrovacieho programu číslo 35 tu dostupného na týchto stránkach, prípadne tu s užívateľským rozhraním pre šifrovanie len textov.


Autokľúč (autokláv)
Autokľúč čiže autokláv je metóda šifrovania založená na tom, že kľúčom je (aj) samotná zpráva. Takto, ako kľúč, sa dá použiť zpráva v zásade buď v zašifrovanom stave, alebo v odšifrovanom stave. Zašifrovaný stav nie je skrytý, preto jeho časť nemá význam požiť ako tajný kľúč; používame teda druhý spôsob. Pri zašifrovaní písmena sa (prakticky spolu s použitím ďalších kľúčov) teda použije ako kľúč jednotlivé (susedné) písmeno (otvorenej) zprávy, alebo (čo je výhodnejšie, ale nie je to podstatou autokľúča) jeho súčet s predtým takto už použitými písmenami.
Inak povedané: pri použití autoklávu (autokľúča) sa písmeno šifrovanej zprávy zašifruje nielen s použitím dohodnutých kľúčov, ale aj s použitím znaku (alebo kumulatívne viacerých znakov) šifrovanej zprávy ako ďalšieho kľúča.
Na rozdiel od zašifrovania s použitím (len) dohodnutých kľúčov, kedy pri zmene jednoho písmena otvoreného (nezašifrovaného) textu nastane v zašifrovanej zpráve zmena len na mieste toho jednoho zmeneného písmena, pri šifrovaní s použitím autokľúča (autoklávu) nastane zmena v zašifrovanej zpráve nielen na mieste toho jednoho zmeneného písmena, ale aj na mieste všetkých ďalších písmen až do konca zašifrovanej zprávy. V tom spočíva sila autokľúča, najmä ak sa spojí aj s inými metódami, napríklad vatou alebo chvostíkmi.
V rôznych textoch (dúfam, že nie v praxi) je možné sa stretnúť s popisom použitia len samotného autokľúča bez ďalších kľúčov, čo by bolo neuveriteľne ľahkovážne použitie.
Ako autokľúč nie je vhodné použiť zašifrovanú zprávu, lebo je známa, preto ako autokľúč používame otvorenú zprávu.



Skryté metódy kľúčov
V šifrovaní klasicky platí požiadavka, aby odolalo útoku, aj keď je známa metóda (spôsob) šifrovania.
Pre zvýšenie odolnosti šifrovania je možné použiť skryté (neverejné, teda utajované) metódy v tvorbe kľúčov, ktoré sú ich neoddeliteľnou súčasťou. Nie sú súčasťou spôsobu (metódy) šifrovania. Niektoré už boli spomenuté. V zásade ide o:
• základ dohodnutý pre tvorbu (základného) kľúča, napr. verejne bežná tlačovina (napr. kniha, kalendár, periodikum (celé alebo mechanicky oddelená časť)), obrázok (fotografia, obraz, dvojhodnotový (napr. čiarový, QR,...) kód), rukopisná poznámka významove splývajúca s okolím, ľubovoľná zpráva (napr. výročná zpráva akciovej spoločnosti, ...) - to všetko môže byť prejavené materiálne (papier, ...) alebo nemateriálne (elektronicky), spravidla neskryte (prípadne aj skryte). Základ môže byť veta (najlepšie s nezmyselným významom), ba aj slovo, dokonca aj slovníkové(!) ak sa s ním ďalej pracuje...
• spôsob (spravidla výber) dohodnutý pre tvorbu (základného) kľúča z dohodnutého základu, napr. číslo strany, číslo riadku, prípadne (už vyššie uvedené) parametre posun a skok, tiež (ďalej v príkladoch v zátvorke použijem ako základ slovo "jablko") vynechanie samohlások (napr. "jblk"), tiež vynechanie párnych znakov (napr. jbk), tiež predĺženie na dĺžku najbližšieho vyššieho prvočísla (jablkoj), tiež predĺženie opakovaním (dohodnutý počet krát) so skracovaním (buď skracovanie spredu napr. "jablko ablko blko lko ko o", alebo skracovanie odzadu napr. "jablko jablk jabl jab ja j", alebo skracovanie inak...), tiež ich kombinácie;; parametre posun a skok (skok je dôležitejší) sa môžu dohodnúť samostatne, ale tiež sa môžu odvodzovať zo základu, napr. z počtu jeho znakov, napr. skok = prvočíslo najbližšie vyššie od počtu znakov základu (alebo predĺženého základu) ("jablko" - skok=7) a posun = dopočet (od hodnoty skoku) do najbližšej vyššej desiatky (=3), alebo stovky (=93), a tak podobne....
• náväznosť kľúčov, napr. ako sa z (najdlhšieho základného) kľúča (alebo zo základu vôbec) vytvoria ďalšie základné kľúče, napr. K1=veta, K2=prvé slovo vety, K3=druhé slovo vety, atď..., alebo napr. použitie obráteného poradia písmen, alebo posunu a skoku, alebo náhrada opačnými (inverznými) písmenami (na základe ich poradia v abecede bežnej, alebo dohodnutej nepravidelnej);; ak je základom veta, oveľa lepšie(!!) je nebrať z nej slová, ale dohodnuté počty znakov.
Napríklad: z predĺženého základu (v príklade vyššie)"jablko ablko blko lko ko o" vyberať štyri kľúče postupným skracovaním spredu aj odzadu o tri znaky: K1=jablkoablkoblkolkokoo; K2=lkoablkoblkolko; K3=ablkoblko; K4=kob.
Iný príklad: z krátkej vety "Jablko padlo" je možné vyberať tesne podpolovičné počty posledných znakov, a zvyšok spracovať takisto, až do vyčerpania možností - napr. K1=jablkopadlo; K2=padlo; K3=lo;; ak by sme podobne vyberali prvé znaky, príklad by bol: K1=jablkopadlo; K2=jablk; K3=ja.
• nelogické rozdeľovanie základného textu: použitím dohodnutého základu ktorým je ľahko zapamätateľný reťazec (text, napr. veta), a výberom kľúčov z toho základu dohodnutým spôsobom inak než po jednotlivých slovách, je možné vyhnúť sa slovníkovým slovám (pre vylúčenie známej hrozby "slovníkového útoku" na šifru) a predsa zachovať výhodu ľahšieho zapamätania.
Napríklad: dohodnutý ľahko zapamätateľný základ nech je "zajac striela polovnika", ktorého rozdelenie na tri kľúče nech je od začiatku postupne 6 písmen, ďalej 7 písmen, ďalej 8 písmen - takto zo základu 21 písmen dostaneme tri kľúče: K1=zajacs, K2=trielap, K3=olovnika, ktoré by sme márne hľadali v slovníku; ich najmenší spoločný násobok, teda počet znakov kombinovaného kľúča, po ktorom už nastane opakovanie, je 3*7*4=84 znakov, čo je 4-násobok dĺžky základu!
Dohodnutý spôsob výberu znakov z dohodnutého základu je tu (ten najjednoduchší) na základe počtu znakov, čo je možné urobiť mnohými spôsobmi, kde počty znakov môžu byť postupnosťou veľmi rôzne definovanou, napríklad s diferenciou konštantnou, premenlivou rôzne (aj nelineárne, aj mat.postupnosťou), ba aj odvodenou napr. od číselných kódov znakov; navyše je možné zo základu výber kľúčov robiť s určitým prekrytím či vynechaním; pre zníženie omylnosti by som nešiel do zložitostí, hoci aj aj rafinovane premyslený výber nemusí byť zložitý v uskutočňovaní...

Príklad metódy vytvorenia kľúčov:
• základ dohodnutý pre tvorbu (základného) kľúča = zarámovaný obrázok ľudového hrdinu na poličke s knihami,
• spôsob dohodnutý pre tvorbu (základného) kľúča = meno z obrázka = "Juro Janosik" - je to dostatočne ustálený jednoznačný tvar, vynechávame diakritiku; medzeru a veľkosť písmen si upravuje program (medzeru vynechá, všetky písmená zmení na malé),
• dohodnutá náväznosť - ako sa z vytvoria ďalšie základné kľúče: budú tri, postupne vynechávam po dve písmená:
      K1 = Juro Janosik (11 znakov)
      K2 = ro Janosik (9 znakov)
      K3 = Janosik (7 znakov)
Skombinovaný kľúč, ktorý z nich vznikne, bude mať dĺžku opakovanej skupiny znakov (11, 7 sú prvočísla, iba 9 nie) 11 x 9 x 7 = 693 znakov. Ak bude zpráva dlhšia, bude sa skupina 693 znakov opakovať. Základom sú dve slová, ktoré majú význam. To je riziko. Aby sme ho zmenšili (úplne sa neodstráni...), pridám ešte jeden základný kľúč K4 odvodený od významovo súvisiaceho slova, napr. od slova Terchová (jeho rodisko; iné možnosti: Cesneková=rodné meno jeho matky; Rozsutec=meno kopca nad rodiskom, ...), z toho beriem prvé dve a posledné dve písmená, teda K4=Teva (4 znaky).
Tým sa dĺžka opakovanej skupiny znakov kľúča skombinovaného z uvedených 4 základných kľúčov zvýši na 2582(=najmenší spoločný násobok čísel: 11, 7, (3x3), (2x2)) - je to dlhé, preto to tu nevypisujem. To sú bezmála dve normostrany textu. To by mohlo stačiť, také množstvo možností zrejme nemá ani elektronický verejný podpis. Ak sa použitá dohodnutá metóda udrží v utajení (ako sa na kľúč patrí), je malá šanca uhádnuť ju, keďže použité konkrétnosti sú utopené v mori iných všedných vecí (to je podmienka - používateľ by nemal byť široko-ďaleko známy uctievač Jánošíka; dokonca by bolo lepšie byť jeho ohováračom). Ak si používatelia dohodnutú metódu primerane často pripomenú (= použijú, bárs aj cvične), nemali by byť ťažkosti s jej zapamätaním (niečo sa dá v náznakoch poznačiť na nenápadné miesto) - a, pravdaže, nikto o nej nevie, okrem (dvoch) zúčastnených. Pre obmenu kľúča do jednotlivých zpráv je ešte možné použiť ďalší základný kľúč K5 - napr. odvodený od kalendárových údajov... - ale to už si každý sám domyslí (trebárs na domácu úlohu)...

Základ dohodnutý pre tvorbu (základného) kľúča - je dobre, ak sa prakticky nedá uhádnuť, napríklad "drevena voda" (=11 znakov). Ešte lepší je chaotický reťazec úplne bez významu, napr. druhé písmená viet na dohodnutej stránke knihy či v článku, alebo (pred)posledné písmená krstných mien z dohodnutých dvoch týždňov (bárs aj starého) kalendára, alebo ... (dačo iné).
Možno použiť aj ľubovoľný iný základ, a ak je dlhší, prebytočná časť sa môže vypustiť (na druhej strane, prečo zmenšovať počet znakov, keď potrebujeme čo najdlhší reťazec); ak je kratší, je možné zopár znakov zopakovať. Dôležité je počty znakov kľúčov premyslieť na základe najmenšieho spoločného násobku, ako už bolo vyššie uvedené.
Ak počty znakov a kľúčov zmeníme napríklad na 8, 7, 6, 5, dostaneme najmenší spoločný násobok 420 = počet znakov v opakovanej skupine. Je vhodné si taký kľúč vypísať, pre lepšiu predstavu (na počítači je to ľahké, napr. programom č. 14 z tejto internetovej stránky (je medzi pomôckami).




SPOJENIE PROGRAMU SO ZPRÁVOU

Keďže na odšifrovanie zprávy je potrebný nielen kľúč, ale aj metóda, a tá môže byť vykonávaná aj naším javascriptovým programom, stáva sa odšifrovanie závislé aj na dostupnosti použitia správneho programu. Uchovanie a použitie správneho programu môže byť vec náročnejšia než uchovanie kľúčov, pretože obsah kľúča je prípadne zapamätateľný, ale šifrovací program iste nie.
Istotu čitateľnosti zašifrovanej zprávy aj po dlhom časovom odstupe môže zvýšiť javascript použitý v html stránke spolu so zašifrovanou zprávou. Aj v takýchto prípadoch býva výhodou čo najkratší šifrovací program, čo je tiež cieľom programov poskytovaných na týchto stránkach.
Jedna z takýchto možností spojenia zprávy s programom, v tomto prípade uspôsobená len pre jednostranné dorozumenie - predloženie zprávy príjemcovi, je už vyššie ukázané aj programovo doriešené i poskytnuté v časti "Odkaz@". Je to dobrý spôsob, keďže prostredie html stránky s javascriptom nie je datovo príiš veľké - v uvedenom prípade je to asi 4,5 kilobyte, čo je zhruba jedna stránka A4 zapísaná nahusto. Zmienený program by bolo možné rozšíriť o viac možností týkajúcich sa kľúča, aj o pohodlnejšie zašifrovanie (odšifrovanie je dostatočne pohodlné).




PRAKTICKÉ ŠIFROVANIE DOKUMENTOV

V predošlých častiach sme sa zaoberali šifrovaním klasických zpráv, t. j. telegrafického najjednoduchšieho "formátu", čo však nevyhovuje pre niektoré požiadavky. Ak chceme rozlišovať veľkosť písmen, používať diakritiku (dĺžne, mäkkčene, ...) a interpunkciu (bodky, čiarky, ...), musíme použiť iné spôsoby než doteraz.



Programy
Nateraz bez obšírneho vysvetľovania tu predkladáme použiteľné programy:

program(29)v25D na šifrovanie dokumentov (v rozsahu znakov UTF8 až po 676), (prompt 6 kľúčov+samočinný posun+skok, autokláv, 2°) - program poskytujem na tejto stránke v prílohe (naspodu) aj ako (textový) výpis kódu html+javascript, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(29)v25T na šifrovanie textov(v rozsahu znakov UTF8 až po 676), (prompt 6 kľúčov+samočinný posun+skok, autokláv, 2°) - program poskytujem na tejto stránke v prílohe (naspodu) aj ako (textový) výpis kódu html+javascript, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(29)v21T na šifrovanie textov (v rozsahu znakov UTF8 až po 676), (prompt 6 kľúčov+spoločný posun+skok, autokláv, 2°) - program poskytujem na tejto stránke v prílohe (naspodu) aj ako (textový) výpis kódu html+javascript, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(30) na šifrovanie textov (v rozsahu znakov UTF8 až po 676), (odvodený od predošlého (29) skrátením, má prompt (iba)1 kľúč, autokláv, 2°; žiaden posun ani skok, sila šifrovania je v autokláve a v rozumnom použití druhého stupňa, výhoda je skrátenie kódu a menej promptov) - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(31T) na šifrovanie textov (v rozsahu znakov UTF8 až po 676), podobný predošlému (30), má prompt (iba)1 kľúč, autokláv, 2°; vnútorne kombinovaný druhý kľúč, posun, skok, sila šifrovania je kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(31D) na šifrovanie dokumentov (v rozsahu znakov UTF8 až po 676), podobný predošlému (31T), teda rovnako ako on má prompt (iba)1 kľúč, autokláv, 2°; vnútorne kombinovaný druhý kľúč, posun, skok, ale umožňuje aj šifrovanie dokumentov html formátovaných dokumentov (vrátane obrázkov); sila šifrovania je kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.

program(32T) na šifrovanie textov (v rozsahu znakov UTF8 až po 676), podobný predošlým, má cez prompt vkladané kľúče (max.6), + vnútorne kombinovaný siedmy kľúč, automatický posun v každom kľúči, automatický skok v každom kľúči, autokľúč (autokláv), 2°; sila šifrovania je v kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript. -->
program(32D) na šifrovanie dokumentov (vrátane obrázkov), podobný predošlým, má cez prompt vkladané kľúče (max.6), + vnútorne kombinovaný siedmy kľúč, automatický posun v každom kľúči, automatický skok v každom kľúči, autokľúč (autokláv), 2°; sila šifrovania je kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa.
program(34) na vytvorenie Superkľúča (bez šifrovania) s podstatou popísanou vyššie - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.
program(35T) na šifrovanie textov (v rozsahu znakov UTF8 až po 676), podobný predošlým, má cez prompt vkladané kľúče (max.6, z ktorých sa hneď samočinne vytvárajú ďalej používané superkľúče), + vnútorne kombinovaný siedmy kľúč, automatický posun v každom kľúči, automatický skok v každom kľúči, autokľúč (autokláv), 2°; je to predošlý program BbcJS32T doplnený o použitie superkľúčov; sila šifrovania je v superkľúčoch, v kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa - program poskytujem aj ako (textový) výpis (kód html+javascript) súboru programu, aby sa kód programu zaarchivoval aj v prípade, že by internetový archív spolu s html stránkou nezaarchivoval aj jej javascript.
program(35v05T+D) na šifrovanie textov aj dokumentov (v rozsahu znakov UTF8 až po 676), podobný predošlým, má vkladané kľúče (max.6, z ktorých sa hneď samočinne vytvárajú ďalej používané superkľúče), + vnútorne kombinovaný siedmy kľúč, automatický posun v každom kľúči, automatický skok v každom kľúči, autokľúč (autokláv), 2°; je to predošlý program BbcJS32T doplnený o použitie superkľúčov; sila šifrovania je v superkľúčoch, v kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa.
program(35v07T) na šifrovanie textov (v rozsahu znakov UTF8 až po 676), podobný predošlým, má cez tlačidlo a prompty vkladané kľúče (max.3, z ktorých sa hneď samočinne vytvárajú ďalej používané superkľúče), + vnútorne kombinovaný kľúč, automatický posun v každom kľúči, automatický skok v každom kľúči, autokľúč (autokláv), 2°; sila šifrovania je v superkľúčoch, v kombináciách spojených s kľúčmi, tiež v autokláve a v rozumnom použití druhého stupňa.

Je veľa možností ako v javascriptovom programe riešiť užívateľské rozhranie na html stránke a tiež môže mať význam obmeniť samotné šifrovanie; jednu z takýchto predošlých vývojových variant poskytujeme (skôr na ukážku) v tomto použiteľnom programe:
program (25) na šifrovanie bežných dokumentov (vrátane ich formátovania aj obrázkov), 5 kľúčov, 2xposun+skok, skrývanie kľúčov.
Takýchto obmien je niekoľko desiatok, preto ich poskytnutie tu by mohlo byť skôr mätúce než prínosné. V prípade potreby sa obmena programu dá riešiť individuálne.
Avšak program (29), ktorý tu prednostne poskytujeme (dva odkazy sú o kúsok vyššie) v dvoch variantách: (29)v21T, (29)v25T, pokladáme v prítomnej dobe za veľmi dobrú variantu (29v25T pohodlnejšiu a kratšiu) pre šifrovanie textu. Tento program má svoju obdobu (pozmenené užívateľské rozhranie, bez zmeny šifrovania) pre šifrovanie dokumentov formátovaných html jazykom (teda aj obrázkov, a pravdaže formátovaného textu) = (29)v25D (vyššie).
Vývoj postupne priniesol ďalšie programy (tie s vyššími číslami) ktoré tu (kúsok vyššie) postupne tiež predkladáme.

Tu predkladané programy majú kódy (html aj javascript) písané v prvom rade pre zabezpečenie šifrovacej funkčnosti, tiež (programy pre praktické šifrovanie dokumentov) aby dĺžka kódu (veľkosť súboru) nebola veľká, kvôli čomu sú vynechané už aj vysvetlenia, kontroly a iné čipky, ktorých datový objem ľahko prevýši objem šifrovacej funkčnosti. Pri zachovaní funkčnosti programov ich (najmä JS) kód by možno mohol byť písaný programátorsky elegantnejšie, obvyklejšie; schválne je kvôli väčšej nezávislosti použitý skôr jednoduchší spôsob a radšej základné príkazy, nie sú použité polia a už vôbec nie góglovské jQuery; napokon, predkladaná funkčnosť nevyžaduje zložité nástroje.



Všeobecné vlastnosti takýchto programov sú:

• javascriptový program bežiaci na html stránke v internetovom prehliadači, bez potreby pripojenia na internet a bez potreby inštalovania,
• nepredpokladá sa ručné šifrovanie spôsobom použitým v programe,
• zašifrovať možno všetky bežné znaky (presne: v rozsahu UTF8 do 686 (=26exp2)), ba dokonca v niektorých variantách programu aj obrázky,
• osvedčilo sa pre datové objemy do zhruba jednoho megabyte, ale spoľahlivé za- aj odšifrovanie (najmä veľmi veľkých datových objemov) si treba vopred vyskúšať individuálne,
• program nemá zabudované vysvetlivky, ani kontroly vstupov, čo predpokladá jeho dostatočne oboznámené (odskúšané) používanie - je to "cena" za jeho malý datový objem (menej než 5 kilobyte).
• nevýhoda je, že jeden znak otvoreného textu sa zašifruje do dvoch písmen, čiže počet znakov zašifrovanej zprávy je dvojnásobný; výhodou je, že zašifrovaná zpráva obsahuje len písmená, takže sa dá veľmi dobre prenášať,
• zmenou čo i len jediného znaku kľúča alebo zašifrovanej zprávy sa správne odšifrovanie znemožní; pravdaže, opakovanie odšifrovania po neúspešnom pokuse je vždy možné po opätovnom načítaní východiskového stavu zobrazovanej stránky,
• vnútorne používa tri hlavné moduly: (1) prevod jednotlivých znakov UTF8 do bigramov (dvojpísmen) "aa" až "az", (2) šifrovanie Beaufort (K=A+Z) pre malé písmená vrátane spracovania kľúčov, (3) prevod bigramov do UTF8 znakov; zašifruje sa modulmi 1+2, odšifruje sa modulmi 2+3,
• niektoré varianty programu umožňujú aj ďalší druhý stupeň zašifrovania, ktorý možno ľubovoľnekrát zopakovať, pričom nutnou podmienkou je buď urobiť zmenu v kľúčoch (vo variantách pri vkladaní cez počiatočné programové výzvy "prompt" to neskôr už nie je možné) alebo zmenou (doplnením! - najlepšie o nepárny počet ľubovoľných písmen) obsahu (začiatku!!) zprávy, ktorá (po prvom zašifrovaní) sa má v druhom (príp. ďalšom) stupni zašifrovať; ak sa uvedené nedodrží, nesprávnym použitím sa môže zpráva prípadne aj dešifrovať; naopak, dodržaním uvedených podmienok sa zvýši odolnosť šifrovania,
• použitie kľúčov: tak ako je aj v predošlých spôsoboch uvedené: veľké písmená zmení na malé, zoberie len písmená "a" až "z", všetky ostatné znaky vynechá,
• vkladanie kľúčov (príp. aj parametrov "posun" a "skok") je v dvoch navonok aj funkčne dosť odlišných variantách:
- do okienok, kde sú zobrazené a dajú sa hocikedy zmeniť,
- do (políčok) výziev (tzv. "prompt"), ktoré samočinne "vyskakujú" postupne na začiatku načítania stránky; takto vkladané kľúče sa zobrazujú a dajú sa meniť len počas vkladania (len jednotlivo), a až po ich vložení sa rozbieha zvyšok programu a je prístupné okno pre zprávu; takto vložené kľúče sa už neskôr počas behu programu nedajú zmeniť, čo je (podľa uhla pohľadu) výhoda (že nedošlo k nežiadúcej zmene v kľúčoch) či nevýhoda (nemožno pozmeniť kľúče pre iné zašifrovanie) - ako sa to vezme,
• možno vložiť viac kľúčov, prípadne pre niektoré (vybrané príp. všetky) možno uplatniť (buď rovnaké, alebo jednotlivo odlišné) parametre posun a skok; ak užívateľ nechce použiť pre neho nadbytočný počet kľúčov, tak aj nadbytočné kľúče musia mať nejakú hodnotu, najjednoduchšie je "a", ktoré je obvykle aj predvolené (pri vkladaní konkrétneho kľúča treba "a" vymazať, čo v niektorých prípadoch vykoná program samočinne); obdobne aj posun a skok treba aby mali aj v prípade nevyužitia hodnotu, napr. "0" a "1", alebo radšej obidva "1", lebo skok=0 by bola vyslovene zlá voľba;
• niektoré varianty programu používajú aj (vnútorné, samočinné) vytváranie ďalšieho (užívateľovi neukazovaného, dosť dlhšieho) kľúča (skombinovaním z užívateľom vložených kľúčov) ktorý sa používa v šifrovaní spolu s kľúčmi ktoré vložil užívateľ,
• niektoré varianty programu používajú premenu (transformáciu) vloženého (každého) kľúča do vnútorne samočinne odvodzovaného (neukazovaného) "Superkľúča" popísaného vyššie v časti o kľúčoch; použitie Superkľúča bežný užívateľ ani nepostrehne;
• niektoré varianty programu používajú v šifrovaní spolu s kľúčmi (ako ďalší nevkladaný a neukazovaný kľúč) v každom šifrovacom kroku aj znaky (či už jeden (posledný) alebo (výhodnejšie) viac (nasčítaných predošlých)) z obsahu (otvorenej) zprávy, pre zvýšenie odolnosti šifrovania (= "autokľúč" čiže "autokláv"),
• na rozdiel od predošlých programov, kde sa najprv vytvoril (konečný) kľúč a až potom sa použil pre následné šifrovanie, tu sa (konečný, čiže skombinovaný) kľúč vytvára postupne so šifrovaním jednotlivých znakov a jednotlivé kľúče cyklujú; dôsledok je, že kľúč K1 nemá osobitné postavenie, teda hociktorý kľúč môže byť najdlhší,
• na rozdiel od predošlých programov, kde sa vytvoril (konečný) kľúč po jednotlivých znakoch priamo zo zadaných kľúčov spočítaním ich znakov na príslušnom poradovom mieste, tu sa v niektorých prípadoch naviac kombinujú celé kľúče ako reťazce ich spočítaním do vnútorného kľúča, z ktorého sa potom postupne so šifrovaním použijú jednotlivé znaky; znamená to, že na poradí zadávaných kľúčov záleží - zmenou poradia tých istých zadávaných kľúčov sa vytvorí odlišný zašifrovaný text,
• pri použití sa predpokladá, že užívateľ je oboznámený so šifrovaním v rozsahu celého tohoto textu, je mu známe "Vytváranie kľúča", uplatňuje "Skryté metódy kľúčov" (oboje je vyššie), a vie, že je to len nedokonalá náhrada za neopakovaný utajený jedinečný chaotický náhodný kľúč rovnako dlhý ako zpráva (čo sa v prípade dlhých zpráv obvykle nedodržuje),
• pre vloženie otvoreného textu ktorý má byť zašifrovaný, aj pre ukázanie zašifrovaného reťazca písmen, pre obidvoje je použité to isté okno zaberajúce, príp. až presahujúce väčšinu obrazovky, ktorého rozsah ani nie je príliš odlišujúco vyznačený,
• niektoré varianty programu umožňujú na obrazovke (pomocou tlačidiel) skrývať kľúče, skupinovo vymazať kľúče (príp. aj parametre posun a skok), skrývať (otvorenú aj zašifrovanú) zprávu,
• celú stránku so zašifrovanou zprávou (bez vložených kľúčov aj prípadných parametrov posun aj skok) je s výhodou možné uložiť (=spolu program + zašifrované údaje) a následne otvoriť a vložením kľúčov priamo odšifrovať, ako je vyššie uvedené v časti "Spojenie programu so zprávou"; túto možnosť konkrétneho programu si však treba vyskúšať v konkrétnom prehliadači, pretože sa v tomto môžu dosť líšiť,
• okno pre zobrazenie (otvorenej či zašifrovanej) zprávy na obrazovke sa vytvára obvykle niektorým z týchto spôsobov:
- html poľom "textarea" pre vkladanie textových zpráv, čo umožňuje vkladať znaky v rozsahu písmen malých, veľkých, číslic, diakritiky, interpunkcie, a ďalších v rozsahu znakov UTF8 do 686 (=26exp2); ak sa použijú iné, nahradí ich písmenom "X" a oznámi užívateľovi,
- html odstavcom "p"; prichádza do úvahy teoreticky ešte "span" (alebo "div"), čo umožňuje vkladanie zprávy ako html-formátovaného dokumentu (teda aj napr. vrátane obrázkov), ALE(!): ak vkladaná otvorená zpráva (dokument) obsahuje (napr. v nezobrazovanom(!) pozadí formátovaného textu) značku "/p",...) tak ona označuje koniec okna zprávy, preto zvyšok za značkou "/p" sa nespracuje! - to si treba skontrolovať, aby sa to nestalo,
- html formulárom "form", čo umožňuje vkladanie zprávy ako html-formátovaného dokumentu (teda aj napr. vrátane obrázkov); zdá sa, že tento spôsob zlučuje výhody predošlých dvoch spôsobov,
z ktorých každý má svoje vlastnosti (výhody aj nevýhody) - treba si vybrať podľa druhu zprávy na základe vlastného vyskúšania.
Pri šifrovaní dokumentov sú za zobrazením prítomné ešte nie-viditeľné html-formátovacie značky ("tagy"), ktoré aj po prípadnom vymazaní toho čo je zobrazené, zostávajú prítomné ale neviditeľné v pozadí, čo môže pôsobiť nežiadúco, ak sa aj to neviditeľné nevymaže opätovným vložením kľúčov.

Pre užívateľa určite nie je jednoduché posúdiť vyššie uvedené okolnosti a vedieť si vybrať z možností, ktoré ma poruke (aj mimo rámca tejto stránky). Odporúčanie je jednoduché: vyskúšať si program "na nečisto", použiť otvorenú "skúšobnú" zprávu obsahujúcu veľký (prinajmenej okolo jednej tisícky, ale pokojne aj niekoľko stotisíc) počet rovnakých(!) znakov (napr.: aaaaaaaaaaa...), použiť "skúšobné" kľúče (príp. ďalšie parametre - posun, skok) čo do počtu, dĺžok a náhodnosti znakov blízke zamýšľaným, zašifrovať aj odšifrovať, a pozorne si prezrieť výsledok, či zodpovedá predstave a potrebe, najmä či zo zašifrovanej zprávy niekde nevykúkajú časti otvorenej zprávy, tiež či a po akom počte znakov sa opakuje rovnaký zhuk znakov; pravdaže, je to len dosť povrchný spôsob posúdenia odolnosti šifrovania, ale je iste lepší než žiaden.
Prichádza do úvahy ešte prieskum zdrojového kódu, ktorý (keďže použitý javascript je jazyk interpretovaný) je vo svojej podstate otvorený (skrývanie kódu (obfuskáciu) som nepoužil), ale to málokto urobí.
Z uvedeného je zrejmé, že s každým konkrétnym programom sa treba vpred oboznámiť v dostatočnej miere.
Programov je tu viacero, a kvôli ich množstvu nie je každý popísaný podrobne.



Skryté metódy zpráv
Pre sťaženie nežiadúceho rozlúštenia zprávy použijeme každú rozumnú metódu (spôsob). Jeden sme už vyššie spomenuli, sú to klamné znaky, inak povedané len výplň bez informačného významu, čiže neveľká skupina chaotických (nič neznamenajúcich) znakov, ktorú môžeme dohodnutým spôsobom použiť v podstate v hociktorej časti otvorenej či zašifrovanej zprávy, ale najmä na začiatku, lebo tam to má najväčší význam a účinnosť. Klamače (vata, výplň, soľ) sa s výhodou môžu použiť nižšie uvedenými spôsobmi.
Ďalej používam pojem "chvostík" pre jeden z koncov (obvykle a s výhodou začiatok) reťazca zprávy v ľubovoľnom stave šifrovania (teda úplne alebo čiastočne zašifrovanej); pojem "vata" ďalej obvykle používam v súvislosti s otvorenou (nezašifrovanou) zprávou.
Vata na začiatku otvorenej zprávy (nemusí byť konkrétne dohodnutá, ale treba dohodnúť že môže byť použitá, aby to po odšifrovaní neprekvapilo a nepovažovalo sa za chybu odšifrovania); počet znakov vaty by mohol byť napr. niekoľko desiatok znakov (12....60...), porovnateľný s dĺžkou použitého kľúča (ak sa použije nie dlhý kľúč); vata má význam najmä na začiatku zprávy.
Chvostík v zašifrovanej zpráve, spravidla na jej začiatku (prípadne blízko začiatku): pred odšifrovaním sa musí tento chvostík dohodnutým spôsobom spracovať (odstrániť alebo pridať alebo obidvoje - teda vymeniť), preto musí byť tiež vopred určené jeho odlíšenie, napríklad:
- počtom a umiestnením znakov,
- poradím v reťazci, alebo
- dohodnutou (začiatočnou a) koncovou kombináciou znakov,
- po prvý výskyt dohodnutého písmena (jednoho alebo viac),
ktoré však môže byť pre každú zprávu dohodnuté iné, a to:
- buď priamym určením,
- alebo odvodením (napr. v náväznosti na kľúč(e)).
Je možné použiť:
Odrezaný chvostík = vopred dohodnutý pevný (nie príliš dlhý voči zpráve) začiatok zašifrovanej zprávy, ktorý sa neprenáša(!) - nedopravuje sa so zašifrovanou zprávou. Pred odšifrovaním sa u príjemcu musí doplniť na začiatok zprávy. Keďže sa neprenáša, musí byť vopred dohodnutý buď nemenný (pevne dohodnutý), alebo iný (odvodzovaný dohodnutým spôsobom) pre každú zprávu. Odrezaný chvostík sa vytvorí odšifrovaním zvoleného znenia odrezaného chvostíka. Odrezaný chvostík sa s výhodou môže použiť aj na čiastočne zašifrovanú zprávu, čiže po prvom zašifrovaní, ešte pred druhým zašifrovaním.
Pridaný chvostík = vopred dohodnutý pevný (nie príliš dlhý voči zpráve) začiatok zašifrovanej zprávy, ktorý sa prenáša(!) - ale musí sa u príjemcu pred odšifrovaním odstrániť. Môže byť nemenný (pevne dohodnutý), alebo iný a dohodnúť treba len jeho umiestnenie - ak je (spravidla) celkom na začiatku, tak stačí dohodnúť, kde končí (ak má pevnú dĺžku, tak stačí dohodnúť len počet jeho znakov).
Falošný chvostík = kombinácia prdošlých dvoch spôsobov: u príjemcu treba pridaný chvostík odstrániť a pridať odrezaný chvostík; pravdaže, nemusia mať rovnakú dĺžku. Tu je konkrétny a praktický Popis príkladu použitia chvostíkov (ktorý nie je návodom ani konkrétnym príkladom) kde je pre názornosť použitých viacero chvostíkov. Každý si vyberie čo uzná za vhodné - je možné použiť menej alebo viac, tiež je možná iná kombinácia metód. Možností je veľa, nedá sa uviesť všetky. Kto pochopí (vcelku jednoduchú) podstatu, je schopný si jednotlivosti použitia posúdiť a zvoliť sám.
Koniec zašifrovanej zprávy (na rozdiel od začiatku) pri našom spôsobe šifrovania nie je príliš citlivé miesto. Ak na koniec zašifrovanej zprávy pripojíme akýkoľvek reťazec, po odšifrovaní dostaneme neporušenú otvorenú zprávu, za ktorou nasleduje reťazec znakov bez významu - vyskúšajte si to. Uvedenú vlastnosť je možné rôzne využiť, napríklad na prenos (jedného z) kľúčov alebo iných "služobných" - tzv. "meta"údajov, napr. číslo zprávy, jej datovanie, jej dĺžku, jej kontrolný súčet, určenie príjemcu či odosielateľa, a pod. (to všetko či už v otvorenom, alebo v (samostatne) zašifrovanom stave).



Skryté metódy šifrovania. Kombinované šifrovanie.
Pre sťaženie nežiadúceho rozlúštenia zprávy použijeme každú rozumnú metódu (spôsob). Už v úvode sme spomenuli použitie substitúcie spolu (následne) s transpozíciou, čo je vlastne
Kombinované šifrovanie
Je možné kombinovať viac druhov šifrovania, napríklad už spomenutú substitúciu s transpozíciou. Je tiež možné opakovane použiť jeden a ten istý druh šifrovania (metódu) opakovane za sebou, čo je dvojnásobné (alebo aj ďalšie viacnásobné) zašifrovanie, kde zašifrovaná zpráva sa ešte znova zašifruje ("druhý stupeň"), avšak nutne:
- buď s použitím (aspoň čiastočne) odlišných kľúčov,
- a/alebo s pozmenením reťazca (napr. s použitím vyššie zmienených chvostíkov),
- prípadne aj s pozmenením spôsobu šifrovania (napríklad iným kombinovaním kľúčov, ... a pod.)
V kombinovanom šifrovaní sa ukazuje ako veľmi vhodné používať chvostíky zmiené vyššie.
Pravdaže, "druhý stupeň" zašifrovania možno ľubovoľný (dohodnutý) počet krát opakovať (zakaždým s (iným) pozmenením reťazca alebo pozmenených kľúčov).
Uvedené metódy kombinovania šifrovania možno používať súčasne.
Ich prednostné (ale nie výlučné) použitie je mimo naprogramovaných algoritmov (teda nie je súčasťou počítačových programov).
Ak sa dobre premyslia, potom už samotná znalosť kľúčov (bez znalosti metód kombinovania a v nich použitých hodnôt) nepostačuje na odšifrovanie.
Keďže tieto metódy kombinovania prispievajú k zvýšeniu odolnosti šifrovnia, sú skryté, musia byť udržiavané tak isto ako kľúče, aj keď samotné použité algoritmy šifrovania (kód programu) môžu byť verejne známe.

Premyslené použitie skrytých metód šifrovania a zpráv nie je zložité, ani nadmerne náročné na zapamätanie a je obzvlášť účinné.

Tu je konkrétny a praktický Príklad šifrovania dokumentov, v ktorom sa využíva:
- javascriptový program, zverejnený na tejto stránke,
- vata na začiatku otvorenej zprávy,
- viac kľúčov, posun a skok,
- prvý stupeň zašifrovania, po ňom pridám vatu na začiatok,
- ďalší stupeň zašifrovania.
V tomto konkrétnom príklade (ktorý nie je návodom) je pre názornosť použitých viacero skrytých metód (zpráv, šifrovania, kombinovania kľúčov) a otvorených pevne naprogramovaných metód kombinovania kľúčov. Každý si vyberie čo uzná za vhodné - je možné použiť menej alebo viac, tiež je možná iná zostava metód. Možností je veľa, nedá sa uviesť všetky. Kto pochopí (vcelku jednoduchú) podstatu, je schopný si jednotlivé prvky zabezpečenia posúdiť, povyberať a zložiť sám, a tiež sám vytvoriť celkom iné vlastné. Do toho všetkého je možné zapojiť aj zvolené metódy uvedené vyššie v časti "Vytváranie kľúča" a tiež použiť (v tomto príklade nie je použité) moduly niektorých tu poskytovaných programov (čísla 14, 11, 16).
Konkrétne zvolené podrobnosti sú uvedené priamo v príklade.




Najlepšie spôsoby šifrovania (substitučného, prúdového, súmerného, Beaufort)

► Ak sa dokonale ideálne použije utajený jednorazový kľúč chaotického obsahu a dĺžky zhodnej so zprávou, nie sú ďalšie spôsoby potrebné; ak nie, treba použiť nasledovné, aby sa dosiahlo čo najodolnejšie zašifrovanie.

► Premyslene použiť vhodný počet vhodných kľúčov vhodne rozdielnych dĺžok. Jeden kľúč je málo.

► Superkľúč použiť na vkladané kľúče.

► Postupné pripočítavanie všetkých predošlých znakov kľúča ku každému jednotlivému znaku kľúča v procese šifrovania.

► Autokľúč (z OT, ako jeden z použitých kľúčov).

► Premyslene použiť bezvýznamovú výplň (vata, chvostíky, ...).

► Zašifrovať aj (odlišným) ďalším stupňom.

► Na odlišné zprávy použiť odlišné sady kľúčov.

► Kombinácia uvedených spôsobov v čo najväčšom rozsahu. Čím viac sa od uvedeného upustí, tým viac sa šifrovanie oslabí.




BLOKOVÉ ŠIFROVANIE


Mimo rámca nášho verneovského šifrovania tu predsa predkladáme drobnosti z blokového šifrovania, a to bez vysvetľovania jeho podstaty, pretože v prípade potreby si takéto vysvetlenie záujemca môže ľahko nájsť na internete, je tam toho veľa.

Blokové šifrovanie je dnes (z vonkajšieho pohľadu) najviac rozšírené. Preto sa práve na tento spôsob šifrovania pravdepodobne najviac sústreďuje pozornosť lámačov cudzích šifier. Morálna stránka problému ("gentlemani nečtou cizí dopisy") sa ľahko obíde pseudocieľom, že ide o získanie prístupu k vlastnému obsahu v prípade zabudnutého (strateného) kľúča, nehovoriac o tom, že režimy použijú argumenty o bezpečnosti štátu. Dá sa predpokladať, že najväčšia časť úsilia vynakladaného na preniknutie k cudzím zašifrovaným obsahom je pred verejnosťou skrytá. Okrem toho jestvujú aj priznané či aspoň zrejmé pracoviská zamerané na činnosti v tejto oblasti, ktorých viditeľným prejavom sú aj dostupné netajené počítačové prostriedky na lámanie šifrovania, známe sú programy Wrathion, Fitcrack. Slabinou takejto činnosti je určenie spôsobu (druhu šifry), ktorý bol na zašifrovanie použitý.



Transformácia reťazca (použitie štandartizovanej operácie "hash" = kontrolný súčet)
V hľadaní prijateľných kompromisov pre tvorbu nepredvídateľného kľúča sotva zľavíme z toho, aby aspoň jeden zo základných kľúčov (K1, K2, atď. vstupujúcich do vytvorenia konečného kľúča) nebol slovníkové slovo.
Jednou z možností, ako ponechať výhodu ľahkého zapamätania či poznačenia kľúča, a nestratiť výhodu chaotického usporiadania znakov, je použiť aj v súčasnej šifrológii (kryptografii) zjednotený (štandartizovaný) spôsob (metódu) pretvorenia (transformácie) reťazca do kontrolného súčtu, čo je (nie krátke) číslo vyjadrené v obvykle šestnástkovej (hexadecimálnej) sústave s nemenným (konštantným) počtom znakov ("0" až "9" plus "a" až "f") - (znakov býva zopár desiatok).
Pre uvedený spôsob sa používa anglický pojem "hash" a spôsobov je viacero, ako ich priniesol historický vývoj, keďže sa používajú obvykle priamo v procese ("moderného", najmä nesúmerného) šifrovania, ktoré je stále vo vývoji. Z tých starších je to spôsob nazvaný "MD5" a o niečo menej starší "SHA-1", pre ne sa používa aj názov "kontrolný súčet" alebo "kontrolný odtlačok", ktorý je možné vypočítať z ľubovoľného (aj veľmi dlhého) reťazca znakov. Vytvorenie kontrolného súčtu ručným spôsobom nie je prakticky príliš možné, používa sa naprogramované v určitom (nie samostatne používanom) programovom module, ktorý sa obvykle následne preberá do mnohých užívateľsky prívetivých a rôzne zameraných programov.
Z podstaty veci je obyčajnou úvahou aj bez dokazovania zrejmé, že ak dĺžka východiskového reťazca je väčšia než dĺžka jeho kontrolného súčtu, nie je tam jednoznačnosť, teda musí jestvovať kontrolný súčet rovnaký pre aspoň dva východiskové reťazce; pravdaže, nájsť ich nebude jednoduché, ale to je už iná vec, oveľa komplikovanejšia. Táto nejednoznačnosť je príčinou, prečo sa od starších spôsobov vytvorenia kontrolného súčtu v kryptografii radšej prechádza k novším, ale aj tie z podstaty veci majú uvedenú nejednoznačnosť. Taký je aj osud kontrolného súčtu "MD5", ktorý dáva 32 hexadecimálnych znakov. Napriek uvedenej teoretickej nejednoznačnosti sa však MD5 v praxi naďalej bez praktických ťažkostí úspešne používa na rôzne účely, aj keď možno už nie priamo v šifrovaní. Historickým vývojom pribudli ďalšie kontrolné súčty, tu spomeňme "SHA-1", ktorý dáva 40 hexadecimálnych znakov.
Tu je program(20), ktorý z vloženého reťazca znakov vytvorí kontrolý súčet "MD5" aj "SHA-1". V súvislosti s "našou" témou uveďme dve možnosti použitia:
1. príklad použitia tohoto programu(20) - na tvorbu kľúča pre šifrovanie: dobre si pamätám krátke slovo "pes", ktoré keď vložím ako vstupný reťazec pre kontrolný súčet SHA-1, dostanem ako výsledok 40 znakov: "1524e2951fc39b8cb187fa0752836aa70396df67" čo použijem ako jeden z kľúčov pre vytvorenie konečného kľúča pre naše šifrovanie.
Pravdaže, pri našom spôsobe vytvárania kľúča by sa číslice neuplatnili (písmená áno). Bolo by však možné hexadecimálne číslo previesť na písmená abecedy, toto však v doterajších programoch nie je zahrnuté.
2. príklad použitia tohoto programu(20) - na tvorbu prístupového hesla do schránky elektronickej pošty "snehulienka@centrum.sk". S výhodou použijem názov schránky "snehulienka" ako prvé kľúčové slovo, ktoré nie je skryté, teda si nemusím pamätať jeho znenie. To, čo skrývam len v mojej hlave, je druhé kľúčové slovo "pes", ktoré zapisujem za prvé kľúčové slovo, ale vždy rovnakým spôsobom(!!) - je ľahostajné, či tam dám medzeru, alebo pomlčku, či čiarku, alebo "enter" či čo, ale(!): vždy to musím urobiť ROVNAKO! Takže sa napr. rozhodnem najjednoduchšie, ako reťazec do kontrolného súčtu (do zeleného okienka) vložím "snehulienkapes" a ako výsledok kontrolného súčtu (použiť vždy rovnaký!) napr. (tlačidlom) "MD5" dostanem v ružovom okienku "cc1eb121d003490c0d802f966692c500" čo použijem ako moje heslo pre prístup do mojej schránky elektronickej pošty "snehulienka@centrum.sk". Ako? Takto:
Nikdy si to heslo nezapisujem, vždy si otvorím internetovú stránku s výpočtom kontrolného súčtu, zakaždým si tam to heslo vytvorím vyššie spomenutým spôsobom, kontrolný súčet okopírujem z toho ružového okienka (ťuk ľavým tlačidlom myši do ružového okienka, potom súčasne stlačím klávesy "Ctrl" aj "A" (tým sa mi celý obsah okienka označí ako blok), potom súčasne stlačím klávesy "Ctrl" aj "C" (tým sa mi označený blok skopíruje do počítačovej schránky). Následne idem na prihlásenie do schránky mojej elektronickej pošty, vyplním názov schránky, potom do políčka pre heslo ťuknem ľavým tlačidlom myši, potom súčasne stlačím klávesy "Ctrl" aj "V" (tým sa mi z počítačovej schránky obsah (=moje vytvorené heslo) skopíruje do toho políčka), a ďalej pokračujem v prihlasovaní zaužívaným spôsobom.
Ak by bolo potrebné použiť inú veľkosť písmen a pod., postupovať možno spôsobom naznačeným vyššie v inom príklade so slovom "snehulienka".
V príklade sme použili slovo "pes", ale takéto uhádnuteľné slová v praxi nie je vhodné používať. Vhodná je napr. neuhádnuteľná veta. Taktiež nie je vhodné používať dĺžne a mäkkčene, pretože sa nebývajú vždy zhodne kódované (do čísel).



Štandartizovaná šifra AES-256
Mimo rámca nášho verneovského šifrovania tu predkladáme šifrovací javascriptový program(22) s blokovou šifrou AES-256 bežiaci na html stránke v prostredí internetového prehliadača, bez potreby pripojenia na internet a bez potreby inštalovania. Jadro programu je z cudzieho zdroja. O šifre AES-256 si prípadný záujemca nájde dostatok údajov na internete.




Ako šifroval odboj 1940

Toto je odlišné šifrovanie: jeden znak sa šifruje do dvoch číslic, takže zašifrovaná zpráva má dvojnásobný počet znakov ako otvorený text.
Rukopisné neupravené (zle čitateľné) výpisky z knihy o odboji - vypísané azda okolo r. 1980, sú tu:







Úvaha o použití tohoto šifrovania "s Julesom Vernom"

Pochybujem o tom, že by za súčasných okolností niekto naplno využil to, čo poskytujú tieto internetové Študijné texty a pomôcky pre interaktívnu besedu Šifrujeme s Julesom Vernom. Dôvody vidím dva:
  • Procesormi riadená časť sveta (teda aj internet) je dnes plná nesúmerného, prípadne blokového šifrovania.
  • Ľudia spohodlneli, menej si zabezpečujú vlastnou činnosťou, viac používajú výsledky cudzej práce (= aj počítač, internet,...). Heisenbergov princíp neurčitosti neplatí len v atómovej fyzike, vidím ho v celom živote: nedá sa mať všetko - ak získam pohodlie, ujde mi čosi iné. Málokto si to uvedomuje, a ešte menej sa podľa toho správa; západná kultúra do nás tlačí spotrebu, každý chce čo najviac, aj nepotrebného.

Zväčša sme na blokové či nesúmerné šifrovanie odkázaní pri šifrovaní počítačových súborov pomocou hotových (cudzích, stiahnutých) programov, ale
v prípade šifrovania textov aj dokumentov (vrátane obrázkov) nie sme odkázaní na blokové ani na nesúmerné šifrovanie.
Blokovým ani nesúmerným šifrovaním textov sa nezaoberám z dvoch dôvodov:
  • ponúkané programy spravidla nie sú jednoduché, niektoré vyžadujú inštaláciu, nie sú "multiplatformné", nemajú zdrojový kód dostupný a je zložitejší než tu použitý jednoduchý javascript, teda málo užívateľov ich môže preskúmať, preto sa na ne nedá plne spoľahnúť, najmä že neobsahujú užívateľovi skrytú funkčnosť,
  • kľúče asymetrického šifrovania bývajú z môjho pohľadu zväčša nepraktické: nebýva (zvoliteľná) možnosť kombinácie viacerých kľúčov zadaných užívateľom, a (podľa mojich vedomostí) prakticky nie je vhodné či možné ich uschovať v inej než digitálnej forme (žiaden nenápadný alebo skrytý zápis na papier, žiadna možnosť zapamätania, žiadna možnosť vlastného zadania - vytvára ich program). Digitálna forma kľúča je citlivá na zničenie aj na okopírovanie.

Opak nevýhod blokového a nesúmerného šifrovania je výhodou šifrovania súmerného prúdového:
  • kód programov môže byť krátky, preskúmateľný, ľahko upraviteľný
  • je veľa (užívateľsky výhodných) možností ohľadne kľúča.

Keď som na internete hľadal praktické použitie súmerného prúdového šifrovania (programy), najprv som nenašiel nič, potom odkazy na to čo bolo vytvorené kedysi a už nejestvovalo, a funkčné som našiel tuším dve stránky. Pravda, použitý jazyk textu zužuje možnosti. Tak to bolo aj v tom nájdenom a tak je to aj tu: porozumenie slovenčine je v neveľkom okruhu ľudí, i keď veľa sa dá pochopiť z univerzálne zrozumiteľného zdrojového textu samotného, tiež od jari r. 2017 sú už voľne na internete dostupné strojové samočinné prekladače s dobre zrozumiteľnými prekladmi, ale takých osôb z viacerých príčin (najmä nedostatok vôle) bude len veľmi málo.

Bárs sa tieto stránky zaoberajú šifrovaním súmerným a prúdovým, viaceré tu uvedené veci je možné s výhodou uplatniť aj v iných spôsoboch šifrovania.







Prílohy:


===================================================
== Vypis kodu html + javascript = file <BbcJS29-v21T-pub.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, 2019.
===================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script type = "text/javascript">
var i=0;var tx="";var k=0;var n=0;var k1=k2=k3=k4=k5=k6=p=s=k71=k72="";
function VlozK(){k1=prompt("Vkladat kluce - postupne:\n K1=","");k2=prompt("K2=","a");k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); p=prompt("Posun=","1"); s=prompt("Skok=","1"); k1=k1.toLowerCase().replace(/[^a-z]/g, ""); k2=k2.toLowerCase().replace(/[^a-z]/g, ""); k3=k3.toLowerCase().replace(/[^a-z]/g, ""); k4=k4.toLowerCase().replace(/[^a-z]/g, ""); k5=k5.toLowerCase().replace(/[^a-z]/g, ""); k6=k6.toLowerCase().replace(/[^a-z]/g, ""); p=Number(p); s=Number(s); var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((s+i*p)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((s+i*p)%sumk2.length)} document.getElementById("TLK").style.display = "none"; document.getElementById("TLS12").style.display = "inline"; }
function Zasi(){k=0;NTK();tx=Norm(tx);tx=TDB(tx);k7=k71;tx=ZaS(tx);document.getElementById("T").value=tx}
function Odsi(){k=0;NTK();k7=k71;tx=OdS(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){k=0;NTK();tx=Norm(tx);k7=k72;tx=Si(tx);document.getElementById("T").value=tx}
function NTK(){tx=document.getElementById("T").value}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function ZaS(){var i=0;var k=0;n=p;var Dt=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){n=n+s+i;k=(((i+k+k1.charCodeAt(n%k1.length)+k2.charCodeAt(n%k2.length)+k3.charCodeAt(n%k3.length)+k4.charCodeAt(n%k4.length)+k5.charCodeAt(n%k5.length)+k6.charCodeAt(n%k6.length)+k7.charCodeAt(n%k7.length)+Dt)-(7*97)%26)+97);cZV=k-tx.charCodeAt(i);Dt+=tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function OdS(){var i=0;var k=0;n=p;var Dt=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){n=n+s+i;k=(((i+k+k1.charCodeAt(n%k1.length)+k2.charCodeAt(n%k2.length)+k3.charCodeAt(n%k3.length)+k4.charCodeAt(n%k4.length)+k5.charCodeAt(n%k5.length)+k6.charCodeAt(n%k6.length)+k7.charCodeAt(n%k7.length)+Dt)-(7*97)%26)+97);cZV=k-tx.charCodeAt(i);Dt+=cZV%26+97;vy+=String.fromCharCode(cZV%26+97)}return vy}
function Si(){var i=0;var k=0;n=p;var cZV=0;var vy="";for (i=0;i<tx.length;i++){n=n+s+i;k=(((i+k+(k1.charCodeAt(n%k1.length))+(k2.charCodeAt(n%k2.length))+(k3.charCodeAt(n%k3.length))+(k4.charCodeAt(n%k4.length))+(k5.charCodeAt(n%k5.length))+(k6.charCodeAt(n%k6.length))+(k7.charCodeAt(n%k7.length)))-(7*97)%26)+97);cZV=k-(tx.charCodeAt(i));vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>Klucovanie textu->txt a spat: <span id="TLK">(BbcJS29-v21aT)<input type="button" style="background-color:transparent" value="Vlozit kluce jednorazovo" onclick="VlozK()"></span><span id="TLS12" style="display:none"><input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()"><input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()"> <small><span contenteditable="true">Autor Ing.V.Brabenec,Trencin,2019,BbcJS29-v21aT.html(©Brab®)</span></small><input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br></span><textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)"></textarea></body></html>



====================================================================
== Vypis kodu html + javascript = file <BbcJS30-T=1K+ac+2st-pub.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, 2019.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script type = "text/javascript">
var tx="";var kt=prompt("Vloz kluc","");kt=kt.toLowerCase().replace(/[^a-z]/g,"");
function Zasi(){NTK();tx=Norm(tx);tx=TDB(tx);tx=ZaS(tx);document.getElementById("T").value=tx}
function Odsi(){NTK();tx=OdS(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){NTK();tx=Norm(tx);tx=Si(tx);document.getElementById("T").value=tx}
function NTK(){tx=document.getElementById("T").value}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function ZaS(){var i=0;var Dt=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+kt.charCodeAt(i%kt.length)+Dt-tx.charCodeAt(i);Dt+=tx.charCodeAt(i);vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function OdS(){var i=0;var Dt=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+kt.charCodeAt(i%kt.length)+Dt-tx.charCodeAt(i);Dt+=cZV%26+97;vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function Si(){var i=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+kt.charCodeAt(i%kt.length)-tx.charCodeAt(i);vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}</script>
Klucovanie textu->txt a spat: 
<input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()"> 
<small>Autor Ing.V.Brabenec,Trencin,2019,BbcJS30-T=1K+ac+2st-pub</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()">
<br><textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)">=</textarea></body></html>



====================================================================
== Vypis kodu html + javascript = file <BbcJS29-v25T-pub.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, máj 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script>
var i=0; var tx=""; var k=0; var Dt=0; var siZa=siOd=0; var cZV=0; var vy=""; var k1=k2=k3=k4=k5=k6=k7=k71=k72=""; var s1=s2=s3=s4=s5=s6=p71=p72=s71=s72=p=s=1; function VlozK(){ k1=prompt("Vkladat kluce - postupne:\n K1=",""); k2=prompt("K2=","a"); k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); k1=k1.toLowerCase().replace(/[^a-z]/g, ""); k2=k2.toLowerCase().replace(/[^a-z]/g, ""); k3=k3.toLowerCase().replace(/[^a-z]/g, ""); k4=k4.toLowerCase().replace(/[^a-z]/g, ""); k5=k5.toLowerCase().replace(/[^a-z]/g, ""); k6=k6.toLowerCase().replace(/[^a-z]/g, ""); s6=k6.charCodeAt(0)%26+1; s5=(k5.charCodeAt(0)+s6)%26; s4=(k4.charCodeAt(0)+s5)%26; s3=(k3.charCodeAt(0)+s4)%26; s2=(k2.charCodeAt(0)+s3)%26; s1=(k1.charCodeAt(0)+s2)%26; s71=p72=s1+s3+s5; s72=p71=s2+s4+s6; var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((p71+i*s71)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((p72+i*s72)%sumk2.length)} document.getElementById("TLK").style.display = "none"; document.getElementById("TLS12").style.display = "inline";}
function Zasi(){k=0;tx=document.getElementById("T").value;tx=Norm(tx);tx=TDB(tx);k7=k71;siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").value=tx}
function Odsi(){k=0;tx=document.getElementById("T").value;k7=k71;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){k=0;tx=document.getElementById("T").value;tx=Norm(tx);k7=k72;tx=Si(tx);document.getElementById("T").value=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ i=0; k=0; Dt=0; cZV=0; vy=""; for (i=0;i<tx.length;i++){ k=(((i+k+ k1.charCodeAt((i*s1+s1*s1)%k1.length)+ k2.charCodeAt((i*s2+s2*s2)%k2.length)+ k3.charCodeAt((i*s3+s3*s3)%k3.length)+ k4.charCodeAt((i*s4+s4*s4)%k4.length)+ k5.charCodeAt((i*s5+s5*s5)%k5.length)+ k6.charCodeAt((i*s6+s6*s6)%k6.length)+ k7.charCodeAt((i)%k7.length)+ Dt)-(7*97)%26)+97); cZV=k-tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+ siOd*(cZV%26+97); vy+=String.fromCharCode(cZV%26+97)}return vy}
function Si(){var n=1;i=0;k=0;cZV=0;vy="";for (i=0;i<tx.length;i++){n=i+k;k=i+k+k1.charCodeAt(n%k1.length)+k7.charCodeAt(n%k7.length)-(7*97)%26+97;cZV=k-tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Klucovanie textu->txt a spat: 
<span id="TLK">
<input type="button" style="background-color:transparent" value="Vlozit kluce jednorazovo" onclick="VlozK()">
</span><small>BbcJS29-v25T =6K+ap+as+ac</small>
<span id="TLS12" style="display:none">
<input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()">
<small>Autor Ing.V.Brabenec,Trencin,2020.</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br>
</span>
<textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)"></textarea>
</body></html>



====================================================================
== Vypis kodu html + javascript = file <BbcJS29-v25D-pub.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, máj 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script>
var i=0; var tx=""; var k=0; var Dt=0; var siZa=siOd=0; var cZV=0; var vy=""; var k1=k2=k3=k4=k5=k6=k7=k71=k72=""; var s1=s2=s3=s4=s5=s6=p71=p72=s71=s72=p=s=1;
function VlozK(){ k1=prompt("Vkladat kluce - postupne:\n K1=",""); k2=prompt("K2=","a"); k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); k1=k1.toLowerCase().replace(/[^a-z]/g, ""); k2=k2.toLowerCase().replace(/[^a-z]/g, ""); k3=k3.toLowerCase().replace(/[^a-z]/g, ""); k4=k4.toLowerCase().replace(/[^a-z]/g, ""); k5=k5.toLowerCase().replace(/[^a-z]/g, ""); k6=k6.toLowerCase().replace(/[^a-z]/g, ""); s6=k6.charCodeAt(0)%26+1; s5=(k5.charCodeAt(0)+s6)%26; s4=(k4.charCodeAt(0)+s5)%26; s3=(k3.charCodeAt(0)+s4)%26; s2=(k2.charCodeAt(0)+s3)%26; s1=(k1.charCodeAt(0)+s2)%26; s71=p72=s1+s3+s5; s72=p71=s2+s4+s6; var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((p71+i*s71)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((p72+i*s72)%sumk2.length)} document.getElementById("TLK").style.display = "none"; document.getElementById("TLS12").style.display = "inline";}
function Zasi(){k=0;tx=document.getElementById("T").innerHTML;tx=Norm(tx);tx=TDB(tx);k7=k71;siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").innerHTML=tx}
function Odsi(){k=0;tx=document.getElementById("T").innerHTML;k7=k71;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").innerHTML=tx}
function ZaOd2Si(){k=0;tx=document.getElementById("T").innerHTML;tx=Norm(tx);k7=k72;tx=Si(tx);document.getElementById("T").innerHTML=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ i=0; k=0; Dt=0; cZV=0; vy=""; for (i=0;i<tx.length;i++){ k=(((i+k+ k1.charCodeAt((i*s1+s1*s1)%k1.length)+ k2.charCodeAt((i*s2+s2*s2)%k2.length)+ k3.charCodeAt((i*s3+s3*s3)%k3.length)+ k4.charCodeAt((i*s4+s4*s4)%k4.length)+ k5.charCodeAt((i*s5+s5*s5)%k5.length)+ k6.charCodeAt((i*s6+s6*s6)%k6.length)+ k7.charCodeAt((i)%k7.length)+ Dt)-(7*97)%26)+97); cZV=k-tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+ siOd*(cZV%26+97); vy+=String.fromCharCode(cZV%26+97)}return vy}
function Si(){var n=1;i=0;k=0;cZV=0;vy="";for (i=0;i<tx.length;i++){n=i+k;k=i+k+k1.charCodeAt(n%k1.length)+k7.charCodeAt(n%k7.length)-(7*97)%26+97;cZV=k-tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Klucovanie textu->txt a spat: <span id="TLK"><input type="button" style="background-color:transparent" value="Vlozit kluce jednorazovo" onclick="VlozK()"></span><small>BbcJS29-v25T =6K+ap+as+ac</small><span id="TLS12" style="display:none"> <input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()"> <input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()"> <small>Autor Ing.V.Brabenec,Trencin,2020.</small> <input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br> </span> <form id="T" style="background-color:rgba(100%,100%,100%, .2);" contenteditable="true">=</form> </body></html>



====================================================================
== Vypis kodu html + javascript = file <BbcJS31-D=ppt+1K+kK+ac+2st-v03-pub.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script>
var tx="";var kt=prompt("Vloz kluc","");kt=kt.toLowerCase().replace(/[^a-z]/g,"");var kc2=0;var k2="";for (i=1;i<7+3*kt.length;i++){kc2= i+ kc2+ kt.charCodeAt((i*kt.charCodeAt(i))%kt.length);k2+=String.fromCharCode(kc2%26+97)}k2=k2+kt;var siZa=siOd=0;
function Zasi(){tx=Norm(tx);tx=document.getElementById("T").innerHTML;tx=TDB(tx);siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").innerHTML=tx}
function Odsi(){tx=document.getElementById("T").innerHTML;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").innerHTML=tx}
function ZaOd2Si(){tx=document.getElementById("T").innerHTML;tx=Norm(tx);tx=Si(tx);document.getElementById("T").innerHTML=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){var i=0;var Dt=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+kt.charCodeAt((i*(kt.charCodeAt(0)+Dt))%kt.length)+k2.charCodeAt((i+Dt)%k2.length)+Dt-tx.charCodeAt(i);Dt+=siZa*tx.charCodeAt(i)+siOd*(cZV%26+97);vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function Si(){var i=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+k2.charCodeAt((i+1)%(k2.length-1))-tx.charCodeAt(i);vy+=String.fromCharCode(((cZV)%26 )+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Klucovanie textu->txt a spat: 
<input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()"> 
<small>Autor Ing.V.Brabenec,Trencin,2020,BbcJS31-D=ppt+1K+kK+ac+2st-v03</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br>
<form id="T"style="background-color:rgba(100%,100%,100%, .2);" contenteditable="true">=</form>
</body></html>



====================================================================
== Vypis kodu html + javascript = file <BbcJS31-T=ppt+1K+kK+ac+2st-v01-pub-ASCII-txt.html> (ASCII) ===
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<html><head><meta charset="UTF-8"></head><body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script>
var tx=""; var kt=prompt("Vloz kluc",""); kt=kt.toLowerCase().replace(/[^a-z]/g,""); var kc2=0; var k2=""; for (i=1;i<7+3*kt.length;i++){ kc2= i+ kc2+ kt.charCodeAt((i*kt.charCodeAt(i))%kt.length); k2+=String.fromCharCode(kc2%26+97)} k2=k2+kt; var siZa=siOd=0;
function Zasi(){tx=Norm(tx);tx=document.getElementById("T").value;tx=TDB(tx);siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").value=tx}
function Odsi(){tx=document.getElementById("T").value;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){tx=document.getElementById("T").value;tx=Norm(tx);tx=Si(tx);document.getElementById("T").value=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ var i=0; var Dt=0; var cZV=0; var vy=""; for (i=0;i<tx.length;i++){ cZV= 97+ kt.charCodeAt((i*(kt.charCodeAt(0)+Dt))%kt.length)+ k2.charCodeAt((i+Dt)%k2.length)+ Dt- tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+siOd*(cZV%26+97); vy+=String.fromCharCode(((cZV)%26 )+97)}return vy} 
function Si(){var i=0;var cZV=0;var vy="";for (i=0;i<tx.length;i++){cZV=97+k2.charCodeAt((i+1)%(k2.length-1))-tx.charCodeAt(i);vy+=String.fromCharCode(((cZV)%26 )+97)}return vy} 
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Klucovanie textu->txt a spat: 
<input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()"> 
<small>Autor Ing.V.Brabenec,Trencin,2020,BbcJS31-T=ppt+1K+kK+ac+2st-v01</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()">
<br><textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .2)">=</textarea>
</body></html>



====================================================================
== Vypis kodu html + javascript = BbcJS32T=pptn+6K+kK+ac+2st.html ===
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script>
var i=0; var tx=""; var k=0; var Dt=0; var siZa=siOd=0; var cZV=0; var vy=""; var k1=k2=k3=k4=k5=k6=k7=k71=k72=""; var s1=s2=s3=s4=s5=s6=p71=p72=s71=s72=p=s=1; k1=prompt("Vkladat kluce - postupne:\n K1=",""); k2=prompt("K2=","a"); k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); k1=k1.toLowerCase().replace(/[^a-z]/g, ""); k2=k2.toLowerCase().replace(/[^a-z]/g, ""); k3=k3.toLowerCase().replace(/[^a-z]/g, ""); k4=k4.toLowerCase().replace(/[^a-z]/g, ""); k5=k5.toLowerCase().replace(/[^a-z]/g, ""); k6=k6.toLowerCase().replace(/[^a-z]/g, ""); s6=k6.charCodeAt(0)%26+1; s5=(k5.charCodeAt(0)+s6)%26; s4=(k4.charCodeAt(0)+s5)%26; s3=(k3.charCodeAt(0)+s4)%26; s2=(k2.charCodeAt(0)+s3)%26; s1=(k1.charCodeAt(0)+s2)%26; s71=p72=s1+s3+s5; s72=p71=s2+s4+s6; var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((p71+i*s71)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((p72+i*s72)%sumk2.length)}
function Zasi(){k=0;tx=document.getElementById("T").value;tx=Norm(tx);tx=TDB(tx);k7=k71;siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").value=tx}
function Odsi(){k=0;tx=document.getElementById("T").value.toLowerCase().replace(/[^a-z]/g, "");k7=k71;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){k=0;tx=document.getElementById("T").value.toLowerCase().replace(/[^a-z]/g, "");tx=Norm(tx);k7=k72;tx=Si(tx);document.getElementById("T").value=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovoleny znak UTF8(nad 676) nahradeny 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ i=0; k=0; Dt=0; cZV=0; vy=""; for (i=0;i<tx.length;i++){ k=(((i+k+ k1.charCodeAt((i*s1+s1*s1)%k1.length)+ k2.charCodeAt((i*s2+s2*s2)%k2.length)+ k3.charCodeAt((i*s3+s3*s3)%k3.length)+ k4.charCodeAt((i*s4+s4*s4)%k4.length)+ k5.charCodeAt((i*s5+s5*s5)%k5.length)+ k6.charCodeAt((i*s6+s6*s6)%k6.length)+ k7.charCodeAt((i)%k7.length)+ Dt)-(7*97)%26)+97); cZV=k-tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+ siOd*(cZV%26+97); vy+=String.fromCharCode(cZV%26+97)}return vy}
function Si(){var n=1;i=0;k=0;cZV=0;vy="";for (i=0;i<tx.length;i++){n=i+k;k=i+k+k1.charCodeAt(n%k1.length)+k7.charCodeAt(n%k7.length)-(7*97)%26+97;cZV=k-tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Kľúčovanie textu->txt a späť: 
<small>BbcJS32T =ppt+6K+kK+ap+as+ac+2st</small>
<input type="button" style="background-color:transparent" value="Zaklucovat" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odklucovat" onclick="Odsi()">
<small>Autor Ing.V.Brabenec,Trencin,2020.</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br>
<textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)"></textarea>
</body></html>



====================================================================
== Vypis kodu html + javascript = BbcJS34.html ===
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style=" background-color: #d3d3d3; font-family: Arial; font-size: larger; margin-left: 0.5cm; margin-right: 0.5cm; ">
<!-- Ing. Vojtech Brabenec, Trencin, 16.6.2021 -->
<script type="text/javascript">
function Superkluc(){
var $khA=document.getElementById("uni").value.toLowerCase().replace(/[^a-z]/g, "");var $L=0;var $skA="";var $compN=0;
for(m=0;m<(47+$khA.length%7);m++){for(i=0;i<$khA.length;i++){$L+=((($khA.charCodeAt(i%$khA.length)-97)%26)+1)}
var $skkum1N=$L;
for(i=3+$khA.length%7;i<(17+$L%23);i++){$skkum1N=(($skkum1N+(i*i))+((($khA.charCodeAt(i%$khA.length)-97)%26)+1+i)+(i*i*i)+7+(($khA.charCodeAt((i%$khA.length)-(i%$khA.length))-97)%26))%26;if(i-i%3==0){$skkum1N=($skkum1N*$skkum1N*$skkum1N)%26}
if((($skkum1N-$compN)>7)||(($compN - $skkum1N)>7)){$skA+=String.fromCharCode($skkum1N+97)}$compN=$skkum1N;}$khA=$skA;}
document.getElementById("uni").value=$skA;}
</script>
<br><small><small>(BbcJS34-v18-pub) </small></small>   
<b>SUPERKLUC</b><br>
Zo zadaneho (zvoleneho, dohodnuteho) pismenoveho kluca - "hesla" (t.j. retazca znakov, pismen) sa tu vytvori (skombinuje) chaoticky Superkluc pre dalsie pouzitie pri sifrovani. Jednotlive pismena sa <u>nevratne</u> nahradia inymi bez viditelnej logickej suvislosti. <br>
Superkluc sa tu vytvori kaskadovite samocinnym opakovanym vytvorenim samokluca zo zadaneho kluca-hesla; pocet opakovani ako aj dalsie parametre su premenlive, odvodzovane od zadaneho kluca-"hesla".<br>
Pouzite taky dlhy kluc-heslo, aby ho nebolo mozne v rozumnych medziach prelomit opakovanym nahodnym skusanim.<br>
<small>Kluc-heslo moze byt lubovolne dlhy retazec lubovolnych znakov, ale treba aby tam boli aj nejake pismena latinskej abecedy. Pravdaze, pre vytvorenie Superkluca pre zasifrovanie a pre odsifrovanie musia byt retazce Kluca-hesla uplne rovnake.</small><br>
<small>Vytvoreny Superkluc obsahuje len male pismena 26znakovej latinskej abecedy. Pocet znakov (pismen) Superkluca nie je konstatny, je premenlivy, je odvodeny predovsetkym zo samotych pismen kluca-hesla a iba malo zavisi od poctu znakov (pismen) kluca-hesla. Tato instancia Superkluca mava aspon okolo styristo znakov (pismen), bez ohladu na to, aka je dlzka vlozeneho kluc-hesla.
</small><br><br>
Kluc-heslo pre vytvorenie Superkluca napiste alebo vlozte do okienka nizsie.<br>
Po tuknuti na tlacidlo "Vykonaj !", odtial tiez vyberte vytvoreny Superkluc.<br>
<small>Kopirovat mozno klavesami Ctrl+C, vyberat Ctrl+X, vkladat Ctrl+V.<br></small>
<textarea id="uni" rows="7" cols="120" wrap="soft"></textarea><br>
<b>Tu tuknut, aby sa vytvoril Superkluc: -->> </b>
<input value=" Vykonaj! " onclick="Superkluc()" type="button">
</body></html>



====================================================================
== Vypis kodu html + javascript = BbcJS35T-v05-pub ===
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<html><head><meta charset="UTF-8"></head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<script type = "text/javascript">
var i=0; var tx=""; var k=0; var Dt=0; var siZa=siOd=0; var cZV=0; var vy=""; var k1=k2=k3=k4=k5=k6=k7=k71=k72="a"; var s1=s2=s3=s4=s5=s6=p71=p72=s71=s72=p=s=1; k1=prompt("Vkladať kľúče - postupne:\n K1=",""); k2=prompt("K2=","a"); k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); var khA=""; khA=k1;k1=Suklu(); khA=k2;k2=Suklu(); khA=k3;k3=Suklu(); khA=k4;k4=Suklu(); khA=k5;k5=Suklu(); khA=k6;k6=Suklu(); 
function Suklu(){ khA=khA.toLowerCase().replace(/[^a-z]/g, ""); var L=0;var skA="";var compN=0; for(m=0;m<(47+khA.length%7);m++){for(i=0;i<khA.length;i++){L+=(((khA.charCodeAt(i%khA.length)-97)%26)+1)} var skkum1N=L; for(i=3+khA.length%7;i<(17+L%23);i++){skkum1N=((skkum1N+(i*i))+(((khA.charCodeAt(i%khA.length)-97)%26)+1+i)+(i*i*i)+7+((khA.charCodeAt((i%khA.length)-(i%khA.length))-97)%26))%26;if(i-i%3==0){skkum1N=(skkum1N*skkum1N*skkum1N)%26} if(((skkum1N-compN)>(3+skkum1N%5))||((compN - skkum1N)>(3+skkum1N%5))){skA+=String.fromCharCode(skkum1N+97)}compN=skkum1N;}khA=skA;} return skA} 
s6=k6.charCodeAt(0)%26+1; s5=(k5.charCodeAt(0)+s6)%26; s4=(k4.charCodeAt(0)+s5)%26; s3=(k3.charCodeAt(0)+s4)%26; s2=(k2.charCodeAt(0)+s3)%26; s1=(k1.charCodeAt(0)+s2)%26; s71=p72=s1+s3+s5; s72=p71=s2+s4+s6; var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((p71+i*s71)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((p72+i*s72)%sumk2.length)} 
function Zasi(){k=0;tx=document.getElementById("T").value;tx=Norm(tx);tx=TDB(tx);k7=k71;siZa=1;siOd=0;tx=Sif(tx);document.getElementById("T").value=tx}
function Odsi(){k=0;tx=document.getElementById("T").value.toLowerCase().replace(/[^a-z]/g, "");k7=k71;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx);document.getElementById("T").value=tx}
function ZaOd2Si(){k=0;tx=document.getElementById("T").value.toLowerCase().replace(/[^a-z]/g, "");tx=Norm(tx);k7=k72;tx=Si(tx);document.getElementById("T").value=tx}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovolený znak UTF8(nad 676) nahradený 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ i=0; k=0; Dt=0; cZV=0; vy=""; for (i=0;i<tx.length;i++){ k=(((i+k+ k1.charCodeAt((i*s1+s1*s1)%k1.length)+ k2.charCodeAt((i*s2+s2*s2)%k2.length)+ k3.charCodeAt((i*s3+s3*s3)%k3.length)+ k4.charCodeAt((i*s4+s4*s4)%k4.length)+ k5.charCodeAt((i*s5+s5*s5)%k5.length)+ k6.charCodeAt((i*s6+s6*s6)%k6.length)+ k7.charCodeAt((i)%k7.length)+ Dt)-(7*97)%26)+97); cZV=k-tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+ siOd*(cZV%26+97); vy+=String.fromCharCode(cZV%26+97)}return vy} 
function Si(){var n=1;i=0;k=0;cZV=0;vy="";for (i=0;i<tx.length;i++){n=i+k;k=i+k+k1.charCodeAt(n%k1.length)+k7.charCodeAt(n%k7.length)-(7*97)%26+97;cZV=k-tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
</script>
Kľúčovanie textu->txt a späť: 
<small>BbcJS35T-v05-pub =6SK+ap+as+ac</small>
<input type="button" style="background-color:transparent" value="Zakľúčovať" onclick="Zasi()">
<input type="button" style="background-color:transparent" value="Odkľúčovať" onclick="Odsi()">
<small>Autor Ing.V.Brabenec,Trenčín,jún 2021.</small>
<input type="button" style="background-color:transparent" value="(2°)" onclick="ZaOd2Si()"><br>
<textarea id="T" style="width:100%; height:97%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)"></textarea>
</body></html>


----
====================================================================
== Vypis kodu html + javascript = BbcJS35T+D-v05-pub === 
       Autor: Ing. Vojtech Brabenec, Trencin, jún 2020.
===============================================================
<<
<html><head><meta charset="UTF-8">
<style>
.skryvane {display: none}
.transpar {background-color:transparent}
</style>
</head>
<body style="font-family:Verdana;color:darkblue;background-color:#D8C6A0;word-wrap:break-word;">
<input value="Pozn." onclick="ZobrazitSkryt('#Stranky')" type="button">
<input value="JS35TxA" onclick="ZobrazitSkryt('#JS35TxA')" type="button">
<input value="JS35TxB" onclick="ZobrazitSkryt('#JS35TxB')" type="button">
<input value="JS35TxC" onclick="ZobrazitSkryt('#JS35TxC')" type="button">
<span id="#Stranky" class="skryvane">
<a href="http://www.trencan.6f.sk/" target="_blank">http://www.trencan.6f.sk/</a><br>
</span>
<div id="#JS35TxA" class="skryvane"><iframe src="JS35TxA.txt" width="100%" height="35" scrolling="no"></iframe></div>
<div id="#JS35TxB" class="skryvane"><iframe src="JS35TxB.txt" width="100%" height="35" scrolling="no"></iframe></div>
<div id="#JS35TxC" class="skryvane"><iframe src="JS35TxC.txt" width="100%" height="35" scrolling="no"></iframe></div>
<script type="text/javascript">
var i=0; var tx=""; var k=0; var Dt=0; var siZa=siOd=0; var cZV=0; var vy=""; var k1=k2=k3=k4=k5=k6=k7=k71=k72="a"; var s1=s2=s3=s4=s5=s6=p71=p72=s71=s72=p=s=1;
function VlozK(){ k1=prompt("Vkladať kľúče - postupne:\n K1=",""); k2=prompt("K2=","a"); k3=prompt("K3=","a"); k4=prompt("K4=","a"); k5=prompt("K5=","a"); k6=prompt("K6=","a"); var khA=""; khA=k1;k1=Suklu(); khA=k2;k2=Suklu(); khA=k3;k3=Suklu(); khA=k4;k4=Suklu(); khA=k5;k5=Suklu(); khA=k6;k6=Suklu();
function Suklu(){ khA=khA.toLowerCase().replace(/[^a-z]/g, ""); var L=0;var skA="";var compN=0; for(m=0;m<(47+khA.length%7);m++){for(i=0;i<khA.length;i++){L+=(((khA.charCodeAt(i%khA.length)-97)%26)+1)} var skkum1N=L; for(i=3+khA.length%7;i<(17+L%23);i++){skkum1N=((skkum1N+(i*i))+(((khA.charCodeAt(i%khA.length)-97)%26)+1+i)+(i*i*i)+7+((khA.charCodeAt((i%khA.length)-(i%khA.length))-97)%26))%26;if(i-i%3==0){skkum1N=(skkum1N*skkum1N*skkum1N)%26} if(((skkum1N-compN)>(3+skkum1N%5))||((compN - skkum1N)>(3+skkum1N%5))){skA+=String.fromCharCode(skkum1N+97)}compN=skkum1N;}khA=skA;} return skA}
s6=k6.charCodeAt(0)%26+1; s5=(k5.charCodeAt(0)+s6)%26; s4=(k4.charCodeAt(0)+s5)%26; s3=(k3.charCodeAt(0)+s4)%26; s2=(k2.charCodeAt(0)+s3)%26; s1=(k1.charCodeAt(0)+s2)%26; s71=p72=s1+s3+s5; s72=p71=s2+s4+s6; var sumk1=k2+k1+k3+k5+k4+k6+k1+k2+k6+k4+k5+k3+k5+k3+k4+k2+k6+k1; for (i=0;i<sumk1.length;i++){k71+=sumk1.charAt((p71+i*s71)%sumk1.length)} var sumk2=k3+k2+k6+k5+k3+k5+k6+k2+k2+k6+k5+k3+k1; for (i=0;i<sumk2.length;i++){k72+=sumk2.charAt((p72+i*s72)%sumk2.length)} document.getElementById("TLK").style.display="none";}
function Zasi(){k=0;tx=Norm(tx);tx=TDB(tx);k7=k71;siZa=1;siOd=0;tx=Sif(tx)}
function Odsi(){k=0;tx=tx.toLowerCase().replace(/[^a-z]/g, "");k7=k71;siZa=0;siOd=1;tx=Sif(tx);tx=BDUTFz(tx)}
function ZaOd2Si(){k=0;tx=tx.toLowerCase().replace(/[^a-z]/g, "");tx=Norm(tx);k7=k72;tx=Si(tx)}
function Norm(){var sumtx="";var ztx="";var m=0;for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);if (ztx.charCodeAt()>676){m=m+1;ztx="X"}sumtx=sumtx+ztx}if (m > 0){alert(m+" -x nepovolený znak UTF8(nad 676) nahradený 'X'")}return sumtx}
function TDB(){var RBg="";var ztx="";for (iT=0;iT<tx.length;iT++){ztx=tx.charAt(iT);RBg=RBg+String.fromCharCode(((ztx.charCodeAt()-ztx.charCodeAt()%26)/26)+97)+String.fromCharCode(ztx.charCodeAt()%26+97)}return RBg}
function Sif(){ i=0; k=0; Dt=0; cZV=0; vy=""; for (i=0;i<tx.length;i++){ k=(((i+k+ k1.charCodeAt((i*s1+s1*s1)%k1.length)+ k2.charCodeAt((i*s2+s2*s2)%k2.length)+ k3.charCodeAt((i*s3+s3*s3)%k3.length)+ k4.charCodeAt((i*s4+s4*s4)%k4.length)+ k5.charCodeAt((i*s5+s5*s5)%k5.length)+ k6.charCodeAt((i*s6+s6*s6)%k6.length)+ k7.charCodeAt((i)%k7.length)+ Dt)-(7*97)%26)+97); cZV=k-tx.charCodeAt(i); Dt+=siZa*tx.charCodeAt(i)+ siOd*(cZV%26+97); vy+=String.fromCharCode(cZV%26+97)}return vy} function Si(){var n=1;i=0;k=0;cZV=0;vy="";for (i=0;i<tx.length;i++){n=i+k;k=i+k+k1.charCodeAt(n%k1.length)+k7.charCodeAt(n%k7.length)-(7*97)%26+97;cZV=k-tx.charCodeAt(i);vy+=String.fromCharCode(cZV%26+97)}return vy}
function BDUTFz(){var UTFr="";for (iT=0;iT<tx.length;iT=iT+2){UTFr+=String.fromCharCode(((tx.charAt(iT).charCodeAt()-97)*26)+(tx.charAt(iT+1).charCodeAt()-97))}return UTFr}
function ZobrazitSkryt(Cast) {$prepinanie = document.getElementById(Cast).style; $prepinanie.display = ($prepinanie.display == 'block')? 'none':'block';}
function Zasifruj1(){tx=document.getElementById("T1").innerHTML;Zasi();document.getElementById("T1").innerHTML=tx}
function Odsifruj1(){tx=document.getElementById("T1").innerHTML;Odsi();document.getElementById("T1").innerHTML=tx}
function ZaOd2Si1(){tx=document.getElementById("T1").innerHTML;ZaOd2Si();document.getElementById("T1").innerHTML=tx}
function del1(){document.getElementById("T1").innerHTML="="}
function Zasifruj2(){tx=document.getElementById("T2").value;Zasi();document.getElementById("T2").value=tx}
function Odsifruj2(){tx=document.getElementById("T2").value;Odsi();document.getElementById("T2").value=tx}
function ZaOd2Si2(){tx=document.getElementById("T2").value;ZaOd2Si();document.getElementById("T2").value=tx}
</script>
<hr>
Kľúčovaná časť <small>(BbcJS35T+D-v05)    
<span id="TLK"><input type="button" style="background-color:transparent" value="Jednorazové vloženie kľúčov" onclick="VlozK()"></span>    Autor: Ing. Vojtech Brabenec, Trenčín, 21.3.2016-2021.</small>
<div style=" background-color: #6699FF; margin: 0.2cm; ">
Html: <input type="button" class="transpar" value="Zobraziť/skryť obsah1:" onclick="ZobrazitSkryt('#Cast01')">
<input type="button" class="transpar" value="Zakľúčovať1" onclick="Zasifruj1()">
<input type="button" class="transpar" value="Odkľúčovať1" onclick="Odsifruj1()">      
<input type="button" class="transpar" value="(2°)" onclick="ZaOd2Si1()">                         
<input type="button" class="transpar" value="Del" onclick="del1()">
<span id="#Cast01" class="skryvane" style="display: none;">
<form id="T1" style="background-color:rgba(100%,100%,100%, .2);" contenteditable="true">=</form></span>
</div>
<div style="background-color:rgba(100%,100%,100%, .4); margin: 0.2cm; ">
Text: <input type="button" class="transpar" value="Zobraziť/skryť obsah2:" onclick="ZobrazitSkryt('#Cast02')">
<input type="button" class="transpar" value="Zakľúčovať2" onclick="Zasifruj2()">
<input type="button" class="transpar" value="Odkľúčovať2" onclick="Odsifruj2()">      
<input type="button" class="transpar" value="(2°)" onclick="ZaOd2Si2()">
<span id="#Cast02" class="skryvane" style="display: none;">
<textarea style="width:100%; height:80%;font-family:Verdana;font-size:12.0pt;color:darkblue;background-color:rgba(100%,100%,100%, .3)" id="T2">=</textarea></span>
</div>
</body>
</html>






Autor: Ing. Vojtech Brabenec, Trenčín, 21.3.2016-2021.
Autor poskytuje obsah svojho diela podľa svojho subjektívneho najlepšieho vedomia a svedomia, ale
nemôže zaručiť jeho bezchybnosť ani správnosť,
dielo (aj jeho pripojené aj odkazované súčasti) obsahujú zábavné šifrovanie bez akýchkoľvek záruk,
dielo je určené na výlučne zábavné použitie a na skautské hry,
obsah či funkčnosť diela nie je v úplnosti preskúšaný (chyby sú možné),
podstatou diela je spôsob popísaný už Julesom Vernom pred vyše sto rokmi,
autor nedáva žiadne záruky na dielo, ani
nemá možnosť ovplyvniť použitie diela na strane príjemcu či iné okolnosti použitia diela,
preto sa autor zrieka zodpovednosti za použitie svojho diela inou osobou, a
je vecou rozhodnutia každého príjemcu či používateľ diela či a za akých okolností použije autorove dielo, ale
príjemca či používateľ diela je povinný dodržať právo, najmä Autorský zákon.
Toto dielo zahrnuje aj hypertextovými odkazmi prepojené podstránky.
Pod dielom sa tu rozumejú aj súčasti diela aj časti diela.

V prípade zistenia nesprávností autor prosí o ich oznámenie.

Toto dielo chráni Autorský zákon.
Autorovi patria práva hlavne podľa autorského zákona (618/2003 v aktuálnom znení), najmä
označenie autorstva,
nepozmeňovanie diela,
udeľovanie súhlasu na verejný prenos a iné rozširovanie, a to pred jeho použitím, a
právo na odmenu za využitie diela.
(Koniec diela.)



 

      <<  Návrat späť na vrch tejto strany          
SatorArepoTenetOperaRotas


Nižšie je prípadná reklama poskytovateľa: