O programu
V této sekci bych chtěl uvádět některé vlastnosti a rysy programu. Zdůrazňuji, že se nejedná o nějak vyčerpávající výklad o použitých algoritmech, ale jen o základních principech, na kterých je tento program postaven.
Program
Tento šifrovací systém byl naprogramován v jazyce C. Všechny možné dostupné zdrojové kódy jsou volně dostupné (podle General Public Licence). Část grafického rozhraní byla též psaná v jazyce C++.
Prvotní platforma, pro kterou byl tento program napsán, je systém Windows 95 a vyšší. Nevylučuji však v budoucnu ani další možné systémy. Tento program byl pro platformu Win32 napsán, kvůli tomu, že je v současné době asi nejdostupnější pro řadové uživatele, i když program nese některé rysy Linuxového systému.
Teoreticky lze říci, že program by měl fungovat všude tam, kde je dostupné GNU C. Program byl psán s tím, že bude kompilován a běžet na 32 bitovém počítači a operačním systému. 16bit platformy nejsou podporovány, stejně tak není ani podporován starý souborový systém bez dlouhých názvů souborů.
Použité kompilátory: MinGW, Borland Builder 6. Pro úspěšnou kompilaci však zřejmě budou potřeba i další programy (např. z DJGPP).
Použité knihovny: zlib, pnglib, lzo, allegro.
Česká slovní zásoba byla použita z programu i-spell.
Cíl programu
Cílem tohoto programu je poskytnout co největší paletu různých šifer, které mohou být v současné době k sehnání. Při navrhování funkčnosti byl kladen důraz na modularitu a jednoduchost.
Cílem programu není poskytnout uživateli nějakou dokonale neprůstřelnou šifru na ochranu svých dokumentů. Myslím, že k tomuto účelu jsou tu jistě lepší a dokonalejší systémy šifrování.
Jednotlivé funkce programu nebyly navrženy tak, aby umožňovali oboustranný převod textu do šifrované podoby a zpět. Tento program slouží pouze k šifrování.
U ostatních programů mi vždycky chybělo, že jednotlivé šifry nešli přímo kombinovat a pokud jsme chtěli nějakou trochu složitější šifru, museli jsme programy různě přemlouvat. Tento program byl postaven tak, že šifry mohou být libovolně kombinovány. Takovýto typ je trochu složitější na dešifrování, ale pokud se věnujeme šifrování se staršími lidmi, pak této vlastnosti můžeme plně využit.
Tento program však bohužel zatím nedokáže šifry kombinovat přímo. Zatím je možné je ale celkem jednoduše šifrovat postupně. Bez nutnosti použití schránky na přenos textu.
Důvod vzniku
Když jsem (v létě roku 2002) hledal nějaký program, který by mi umožňoval rychle šifrovat text do jednoduchých druhů šifer, našel jsem pouze jediný. Již dlouho jsem si také zahrával s myšlenkou vytvořit program, který dokázal zobrazovat i jiné než šifry, než u kterých se používají jen písmena a číslice. Zkrátka vytvořit program, který dokáže zobrazit i jiné normálně nepoužívané znaky (př. je Velký polský kříž).
Právě proto vznikl tento projekt, který se snaží kombinovat jednoduché písmenné šifry i složitější grafické šifry, tedy aby vznikl kvalitní program pro přípravu šifer pro ty nejmlaší, ale i starší členy různých oddílů.
Vývoj tohoto programu stále probíhá. Nevylučuji však, že by mohl být někdy nenadále ukončen, právě proto jsem se rozhodl s programem uvolnit i zdrojové kódy, aby se tento program nikdy nemohl stát mrtvým a aby se mohl i nadále (třeba i bez vědomí autora) po ukončení vývoje dále mohl rozvíjet. Proto aby vše zůstalo i nadále volně dostupné, je tento program rozšiřován podle GNU General Public Licence (GPL).
Systém filtrů
Program je vystavěn na systému filtrů, kde existuje jakýsi datový typ, do kterého uchovávají data. Tato data pak jedna funkce zpracuje a výsledný text pak uloží nazpátek. Výsledek pak může znovu použít další filtr a zpracovat. Výsledek se pak vypíše.
Podobný systém existuje i v systému Linux, kde lze výstup programu přesměrovat na vstup jiného programu. V Linuxu je tento systém ale lepší, protože program může zpracovávat přijímaná data ihned a nemusí čekat na ukončení programu zdrojového.
Systém filtrů byl zvolen proto, protože poskytuje dostatečně velkou flexibilitu, kdy rozšiřování programu probíhá pouze tím, že se naprogramuje daný filtr a přidá se do globálního programového obsahu filtrů. Díky tomuto systému odpadá nutnost, aby bylo nutné implementovat nějakou funkci do programu vícekrát, například není potřeba implementovat funkci na úpravu textu, tak aby po každém slově následovala pouze jedna mezera, vícekrát. Tato funkce se jednoduše napíše jednou a ostatní filtry prostě předpokládají, že pracují již s takto předzpracovaným textem.
Příkladem může být i Morseova abeceda. Existuje filtr, který převádí text do Morseovy abecedy. Další filtr, již předpokládají, že pracují s textem v Morseově abecedě. Bylo by totiž zbytečné implementovat tento převod několikrát.
U všech filrů jsem se snažil, aby zpracovávali jenom to, co dokáží zpracovat a aby neznámé hodnoty pak vraceli nazpátek do zašifrovaného textu.
Pokud však dokážete spojovat vstupy a výstupy programů, můžete si užít plného spojování různých šifer dohromady již dnes. Stačí se vyzbrojit trpělivostí a nastudovat si parametry filtrů. Všechny filtry jsou uloženy v adresáři /bin jako oddělené spustitelné programy.
Když jsem začínal psát tento program a rozhodoval se jaký systém použít, zda naprogramovat jeden opravdu velký program nebo zda naprogramovat je několik malých a samostatných programů. Nakonec jsem zvolil kompromis: Existuje větší množství malý podprogramů, které ovládají své okolí pomocí standardních mechanismů. Takto provádí vstup a výstup. každý filtr se tak chová jako malý program.
Použité programy při vývoji
Při vývoji tohoto programu bylo použito mnoho dalších programů a aplikací. Chtěl bych zde uvést alespoň ty, které byly používány nejvíce
Corel Draw 8 - veškerá grafika byla kreslena jako vektorová
Corel Photo-Paint 8 - v tomto programu byly uloženy obrázky z programu Corel Draw
C++Builder 6 - vývoj grafického prostředí
MinGW - nejedná se ani tak o program ale o soubor kompilovacích programů pro Windows, jedná se o GNU C, které pochází z projektu GNU (GNU's Not Unix)
DJGPP - ranné verze programu byly v tomto prostředí napsány, jedná se o něco podobného jako MinGW, ale pro operační systém DOS, pro konfiguraci je stále potřebován
Far Manager - v tomto programu jsem se staral o adresářovou strukturu programu, prováděl jednodušší editace a konfiguroval
NitroSetup - utilita pro vytvoření instalačního programu
TextPad - textový editor, ve kterém byl tento program napsán (zdrojové programy i dokumentace)
WinAce - v tomto programu byly zabaleny instalační soubory
html2hlp - pro vytvoření nápovědy pro programy pod Windows
bmp2png - pro převedení souborů BMP do formátu PNG
Programátorovy poznámky
Zde bych chtěl postupně napsat několik postřehů, rad, zamýšlených funkcích a vše okolo tohoto programu.
Vypadáto, že verze pro jiné operační systémy bude zřejmě chvíli trvat. Kvůli několika důvodům: Taková verze nemá moc velkou šanci se uchytit, protože zde je jen málo uživatelů tohoto operačního systému, dále pak grafické prostředí bylo psáno pod Borlandem, který (zatím) není portovatelný.
Dále se asi odsunul projekt čistě textového prostředí, které by mohlo fungovat opravdu všude. Naštěstí šifrovací část grafického prostředí byla napsána pro toto textové prostředí a teprve potom přenesena do grafického. Doufám, že je vše stále stejně dobře portovatelné.
Od verze 0.3 beta jsem převedl všechny soubory z nekomprimovaného formátu BMP na formát PNG. Tímto se instalovaná data zmenšila asi o 1/3. Program se také trochu urychlil, protože již není potřeba číst tolik dat z disku.
Od stejné verze zřejmě bude ještě k dispozici verze (mini) nebo Lite, která obsahuje jen vše co je potřeba úspěšnému běhu programu. Nejsou instalovány žádné zdrojové kódy. Tyto zdrojové kódy lze však získat z plné verze, která také obsahuje lepší (hezčí) dokumentaci ve formátu HTML. A všechny soubory nutné k rekompilaci programu. Při navrhování zmenšené verze jsem se snažil vytvořit distribuci, která sice nebude kompletní, ale bude na jednu disketu a bude mít naprostou většinu funkcí.
Na instalačních disketách se vyskytuje zkomprimovaný instalační soubor. Použitá komprese je ACE, která poskytuje celkem solidní kompresní výkon.
Prostředí programu
Chtěl bych upozornit na skutečnost
Použité formáty nastavení
Při vytváření programu vzniklo několik požadavků na formátu nastavení některých částí programu. Na tomto místě se je budu snažit alespoň trochu popsat. Protože tento program se stále vyvíjí, není v mých silách zde popsat všechny zkutečnosti, všechny závislosti. Pokud si nejste s něčím jisti, věřte zdrojovým kódům.
Chtěl bych také upozornit na skutečnost, že zde uvedená dokumentace nemusí být úplná ani úplně odpovídající realitě. Upozorňuji také, že tato dokumentace může v budoucích vydáních tohoto programu zastarat.
2)Nastavení hierarchie šifer pro grafické prostředí
K nastavení funkčnosti a hierarchie šifer v grafickém prostředí slouží soubor se jméhem "script.sc", který se nachází v adresáři /data/script .
Pozn. Tento soubor vždy vznikne jako výstup přefiltrováním speciálního definičního souboru standartním preprocesorem jazyka C. Tato skutečnost však neznamená, že je syntaxe tohoto souboru podobná syntaxi jazyka C.
Každý řáděk, který začíná znakem # je ignorován. Na začátku každého souboru je jakési rozvětvené menu. Obsahem každé větve nabídky může být šifra nebo další nabídka.
Na každém řádku je jméno funkce (šifry nebo nabídky) a její interní název, oddělený čárkou. Přitom platí, že název funkce a interní název je na stejném řádku. Jednotlivé řádky se žádným způsobem neoddělují. Pokud se nejedná o název funkce, ale o podnabídku, označíme její interní název jako "_menu_".
Hlavní nabídka je (stejně jako ostatní uzavřena do složených závorek.
Dále je v souboru uvedena definice funkcí. Jméno funkce je vždy uzavřeno do hranatých závorek a po této definici následuje její popis.
1)Nastavení fontů pro bitmap_writer
Pokud se rozhodnete přidat své vlastní grafické šifry, zřejmě budete se budete muset pokusit napsat definiční soubor pro tento filtr. Pokud vás tato možnost i nadále zajímá, pak čtěte dále.
Tento filtr používá vložený text k tomu aby vytiskl jednotlivé znaky do bitmapového souboru. Tyto soubory jsou většinou uloženy v adresáři /data/bmp/. Pro indikaci, že se jedná o takový soubor jsem zvolil příponu souborů SFF.
Pokud máte nějaké pochybnosti podívejte se, jak jsou vyřešeny definiční soubory v tomto programu. Všechny soubory v tomto programu můžete použít jako výchozí vzory pro vlastní.
Cokoliv uvedeného za znakem # je bráno jako komentář a je ignorováno. Příklad:
# tento řádek se ignoruje příkaz # provede se prikaz
Všechna nastavení jsou v závorkách < >. Konec daného příkazu se značí znovuuvedením stejného příkazu se znakem lomítka na začátku. Některé příkazy nemají párový příkaz.
<type document="sifra" name="Braillovo pismo pro nevidome">
Informace souboru jsou uloženy v příkazu <type>. Zatim vsak jsou tyto informace nevyuzity.
<type dokument=... name=...> dokument=sifra udava, ze se jedna o tento typ name= pojmenovani dokumentu pr. <type document="sifra" name="Velky kriz">
Hlavní součást těchto souborů tvoří vše co se nachází mezi <data> </data>.
<data> ... </data>
Text, který je vložen do těchto příkazů se pak zpracováná po řádcích a definuje grafickou podobu znaků a další vlastnosti každého znaku. Jako znak můžeme použít i více hlásek. Jejich grafická podoba však tvoří pouze jediný obrázek.
Tvar každé řádky je následující: Řádka začíná na písmeno nebo na skupinu písmen, následuje znak rovná se "=" a po něm jsou zapsány vlastnosti. Jednotlivé vlastnosti se oddělují čárkami a hodnoty paremetru jsou uzavřeny do závorek následujících hned po jménu vlastnosti:
a=bitmap(znak_A.bmp),align(down)
Pokud chceme vyjádřit nějaké speciální znaky, které by mohly činit problémy, pak použijeme tyto speciální sekvence:
\u - znak uvozovek \k - znak křížku # "=" - znak rovná se = \l - znak menši < \r - znak větši > \\ - znak zpětné lomitko \
Dále následuje popis jednotlivých vlastností, které můžeme použít pro definování vlastností.
bitmap(jmeno_souboru) - obrázek, který se použije pro definované písmeno, podporovány jsou obrázky ve formátu BMP, PCX, TIFF, PNGbitmap(znak_A.bmp)align(cislo) - nastavuje spodní hranici obrázku, tedy která vertikální poloha je brána jako poloha kam má být umístěn obrázek. Zvláštní hodnoty:
- up zeshora
- down zezdola
- +cislo počítá se jako hodnota v bodech shora
- -cislo počítá se jako hodnota v bodech zezdola
align(down)width(cislo) - nastavuje šířku obrázku (v bodech), pokud chceme použít jinou než má obrázek
width(100)height(cislo) - nastavuje výšku obrázku (v bodech), pokud chceme použít jinou než má obrázek
height(100)macro(znak) - alias(znak) - tyto dve vlastnosti jsou totozne a rikaji, ze dane pismeno prevezme vsechny vlastnosti po jinem jiz definovanem znaku. Vlastní postavení má znak __default__ , který se automaticky aplikuje na všechny definované znaky
alias(b)size(cislo) - zmenšuje/zvětšuje obrázek, zadané číslo vyjadřuje počet procent výsledné velikosti
size(80)rsize(cislo) - zmenšuje/zvětšuje obrázek, zadané číslo vyjadřuje počet procent výsledné velikosti
rsize(90)wrap(vyraz) - nastavuje, zda se může za tímto znakem zalomit řádek, tato vlastnost zde slouží proto, aby se nezalamoval řádek uprostřed slova
wrap(1)spacing(cislo) - nastavuje kolik bodů se vynechá po tomto znaku
spacing(2)
Existuje několik znaků se speciálním výnamem:
- __default__ všechny vlastnosti tohoto znaku se automaticky použijí na všechny definované znaky
- __space__ nastavuje jak vypadá mezera
- __newline__ u tohoto znaku je hlavně zajímavá vlastnost height, která nastavuje velikost odřádkovávání