<<

#333 ; Ĉifru per Hill-metodo esperante

>>

Mi fakte havas nun ioman problemon en propra laborado. Mi volas transloĝiĝi kaj tial mi bezonas multe da tempo kaj persona energio por preparado. Multaj gravaj fontoj kaj projektoj estas jam en diversaj paketoj kaj tial malfacile uzeblaj. Ion mi tamen volas skribi. Por skribi estas grave. Por skribi estas la senco de vivo.

Nature ekzistas iomaj problemoj ankaŭ en bona skribado. Mia uzo de Esperanto eble ne estas tute perfekta kaj modela. Ekzemple mi probable ne uzas sufiĉe multe da vorto "la", la difina artikolo. Bedaŭrinde multaj teknikaj terminoj ne estas signife tre klaraj kaj detalaj en nia kara lingvo. Mi ne estas ia neerarebla majstro, sed estas grave por skribi en la lingvo kaj uzi Esperanton. La sola ebleco por vere lerni la lingvon estas por mem aktive uzi la lingvon.

Jam artikolo #333, duono de biblia "nombro de rabobesto" 666. Parenteze, mi ne komprenas kial la relative malgranda nombro 666 povus esti tiel speciala. Ĝi ja ne estas primo. La nombro 2 ja estas la sola para primo. Ĉiuj aliaj paraj nombroj nome estas divideblaj per 2 kaj tial ne primoj. Se mi estus skribinta la Biblion de kristanoj, mi certe estus selektinta ion belan primon por la "nombro de rabobesto", ekzemple 673. Ĉiuokaze, bona persona atingo, 333 esperantaj artikoloj. Mi estas fiera pri tio.

Sed nun mi devas evoluigi ion veran temon por la nova artikolo. En la antaŭa teksto ni ja iom pritraktis simplan ĉifron. Eble mi kontinuu sur la sama pado. Malnova Hill -metodo estas interesa, kvankam eble ne plu tre sekura. Mi tamen volas prezenti mian propran varion, mian aplikon de Hill -metodo. La metodo uzas matricoj kaj vektoroj por ĉifri kaj deĉifri. En Vikipedio estas pri tio angla artikolo "Hill cipher". Oni uzas principojn de lineara algebro, ekzemple matricoj.

Iom da simplaj matematikaj principoj: Estu A matrico kaj A-1 la korelativa kontraŭa matrico ( nu, fakte oni pli bone uzu la nomon inversa matrico ) tiel ke estas A A-1 = A-1 A = I , la identa matrico . Estu u kaj v por la matrico konvenaj vektoroj. Tiam validas:

u = A v

A-1 u = A-1 A v = I v = v

Do ni povas komenci el vektoro v kio enhavu iom da sekreta teksto. Unue ni uzas la sekretan matricon A por produkti la ĉifritan vektoron u kio aperas multe alia kaj tion ni povas publikigi aŭ sendi por la ricevanto de avizo. La ricevanto konas la inversan matricon A-1 kaj povas deĉifri la originan vektoron v kio enhavas la sekretan tekston.

Ioma averto: Mi ne asertas ke la ĉifro plu estus sekura en la moderna epoko de komputiloj!

Kredeble la malforteco de Hill -metodo estas en tio ke estas lineara, la bazo de metodo ja estas lineara algebro. Bona kaj sekura moderna ĉifro devus esti tre nelineara.

Kelkaj celoj kaj kvalitoj de mia propra vario de Hill ĉifro:

La programoj estas nenia sekreto. Grava parto de JavaScript -programo estas videbla en foliumilo ekzemple en datumo "hill.js". Eblas kaj rajtas libere por kopii kaj varii mem, se vi tion volas.

Mi antaŭe iom skribis finne pri matricoj en alia projekto NEWGAL ekzemple por artikoloj g384, g391, g394, g398

La uzanto certe ne bezonas nepre efektivigi la kalkulojn mem, sed eble estus bone por kompreni la bazajn principojn. Kiel tre simpla ekzemplo estu la sekreta matrico A la sekvanta 3*3 matrico:

    ┌         ┐ 
    | 1  2  3 |
A = | 2  3  1 | 
    | 3  1  2 | 
    └         ┘ 

Estas iom malfacile por kalkuli la inversan matricon, sed elektronika kalkulilo nin helpu. Kiel apuda foto atestas, la valuo de korelativa inversa matrico B = A-1 estas:

    ┌                    ┐ 
    | -5/18  1/18   7/18 |
B = |  1/18  7/18  -5/18 | 
    |  7/18 -5/18   1/18 | 
    └                    ┘ 

Kaj ilia produto do estas simple I :

     ┌         ┐ ┌                     ┐   
     | 1  2  3 | | -5/18   1/18   7/18 |   
AB = | 2  3  1 | |  1/18   7/18  -5/18 | = 
     | 3  1  2 | |  7/18  -5/18   1/18 |   
     └         ┘ └                     ┘   
     ┌                                           ┐
     | ( -5+2+21)/18  (1+14-15)/18  ( 7-10+3)/18 |
   = | (-10+3+ 7)/18  (2+21 -5)/18  (14-15+1)/18 |
     | (-15+1+14)/18  (3+ 7-10)/18  (21- 5+2)/18 |
     └                                           ┘
     ┌                   ┐   ┌         ┐
     | 18/18   0     0   |   | 1  0  0 |
   = |   0   18/18   0   | = | 0  1  0 | = I3
     |   0     0   18/18 |   | 0  0  1 |
     └                   ┘   └         ┘

Ni havas la originan vektoron v kun simplaj valuoj kiuj portu la sekretan avizon, en literoj ekzemple "ABC" :

    ┌   ┐ 
    | 1 |
v = | 2 | 
    | 3 | 
    └   ┘ 

Nun ni kalkulu produton u = A v

     ┌         ┐ ┌   ┐   ┌             ┐   ┌    ┐
     | 1  2  3 | | 1 |   | 1*1+2*2+3*3 |   | 14 |
Av = | 2  3  1 | | 2 | = | 2*1+2*3+1*3 | = | 11 | = u
     | 3  1  2 | | 3 |   | 3*1+1*2+2*3 |   | 11 |
     └         ┘ └   ┘   └             ┘   └    ┘

Tio vektoro u estis la ĉifrita avizo, certe tre alia ol la origina vektoro. En normaj anglaj literoj la ĉifrita avizo povus esti ekzemple "NKK" (ĉar K estas en norma ordo la 11-a litero kaj N la 14-a).

Kaj la ricevanto trovos la veran tekston v uzante la inversan matricon B = A-1. Li kalkulas B u = A-1A v = I v = v

     ┌                    ┐ ┌    ┐   ┌                      ┐
     | -5/18  1/18   7/18 | | 14 |   | (-5*14+1*11+7*11)/18 |
Bu = |  1/18  7/18  -5/18 | | 11 | = | ( 1*14+7*11-5*11)/18 |
     |  7/18 -5/18   1/18 | | 11 |   | ( 7*14-5*11+1*11)/18 |
     └                    ┘ └    ┘   └                      ┘
     ┌       ┐   ┌   ┐
     | 18/18 |   | 1 |
  =  | 36/18 | = | 2 | = v
     | 54/18 |   | 3 |
     └       ┘   └   ┘

Kio ja klare estas la origina vektoro v, la sekreta avizo (en literoj ekzemple "ABC").

Nu, tio estis ia principo. Praktikaj kalkuladoj estas iom pli kompleksaj ĉar temas pri iom grandaj matricoj. Estas tamen pli bone kaj pli efekte por uzi nur entjeroj. Mi volas ke certaj literoj respondu al certaj iom malgrandaj pozitivaj entjeroj. Tial la finaj rezultoj de kalkuladoj ne rajtas superi la plej grandan valuon de uzitaj entjeroj.

Mi skribos simplaj JavaScript -programoj por facile efektivigi la ĉifradon kaj deĉifradon per multaj diversaj selekteblaj ŝlosiloj. Vi trovas la programon en datumo "hillybilly.html" kaj nature la lingvo JavaScript estu permesita en via interreta foliumilo se vi volas uzi la programon.

Granda demando klare estas kiel oni kalkulu la 10*10 valuojn en la matricoj. Sekve mi rakontos iom pri tio. Por la 10*10 matrico A ni bezonas trovi same grandan matricon A-1 mod 47, ĉar ni uzas 47 diversaj literoj en la ĉifro. Tial la determinanto de matrico A ne povas esti 0 (nulo) nek dividebla per la faktoroj de 47. Nu, nia nombro 47 ja estas primo kaj tial ĝia sola faktoro estas 47.

Ni amu primoj. Primoj estas niaj amikoj. Ekzemple 46 estus malbona selekto ĉar estas para nombro kaj tial havas 2 kiel faktoro, 46 = 2 * 23. La nombro 48 estus eĉ pli malbona kaj neuzebla ĉar 48 = 2 * 24 = 2 * 2 * 12 = 2 * 2 * 2 * 6 = 2 * 2 * 2 * 2 * 3 kaj do havas ankaŭ 3 kiel faktoro. Se ni ekzemple uzus 48, ni devus tuj forrifuzi ĉiuj matricoj kies determinanto estas para aŭ dividebla per 3.

Nia metodo de 10 signoj en grupo kun 47 diversaj eblecoj estas iom forta. Nome 4710 egalas 52'599'132'235'830'049 kio estas proksimume 5,26*1016, la kvanto da diversaj eblecoj en la grupo de 10 signoj.

Ni povas provi diversaj "hazardaj" alternativoj por matrico kun nombroj 0 ... 46. Se la determinanto estas nek nulo nek (eble multoble) 47, ni povas progresi, kaj kalkuli la inversan matricon A-1 mod 47 kion oni povas uzi por deĉifri la avizon kio estis ĉifrita per matrico A. Poste mi prezentos tian novan programon. Normaj nombroj de JavaScript jam estas iom tro malgrandaj por kalkuli la matricon A-1 kaj tial ni uzu programan helpilon kion afable skribis sinjoro Tom Wu.

La kalkulado de A-1 estas iom malrapida, multe pli malrapida ol la ĉifrado. Mi tamen jam revas pri pli grandaj matricoj ...

Kaj certe fine .......... NI VENKOS!

La Ambasadoro en Finnlando
de sendependa nacio
Mueleja Insulo


Menuo
Ĉefa paĝo (finna lingvo)