Enkriptimi

gurax

Pan ignoramus
Hapja e kesaj teme ka si zanafille kete artikull:

http://theconversation.com/paranoid-defence-controls-could-criminalise-teaching-encryption-41238

flitet per nje lloj 'paranoia' qe ka filluar te shfaqet ne lidhje me sigurine e informacionit elektronik dhe transmetimit te te dhenave ne menyre elektronike.
Shqetesimi nder perdorues ne lidhje me privatesine e te dhenave ka shtuar interesin per mundesite qe te dhenat te enkriptohen gjate transmetimit nga burimi deri ne destinaction. Por nderkohe ky interes i perdoruesve ka shqetesuar ne menyre indirekte organet survejuese, me arsyetimin se nese gjithmone e me shume perdorues do te enkriptojne te tera te dhenat e tyre, kjo do te thote qe do te kete gjithmone e me shume perdorues te dhenat e te cileve nuk mund te survejohen.
Per te evituar kete skenar jo te deshirueshem (?? - nga ana e kujt jo i deshirueshem - ??) nje nga zgjidhjet e ofruara eshte te hartohet legjislacion. Legjislacioni ne fjale nuk do te trajtoje thjesht veprimin e enkriptimit te te dhenave, por shkon disa nivele me tej: trajton veprimin e te mesuarit te konceptit dhe teknikave te enkriptimit. Mesoji dikujt dicka qe ka te beje me enkriptimin, dhe fare mire mund te presesh policine qe te troket tek dera. Ne fund gjithcka reduktohet ne etiketimin 'aktivitet kriminal' te disa principeve matematikore.

No sh!t Sherlock!
Dikush atje lart ne kupole ka deshire te beje shaka jo dhe shume per te qeshur.

Le te qeshim atehere.

Do ta fillojme me 2-3 shkrime pikerisht per te sqaruar ne koncept kriptografine dhe te ilustruar me nje shembull shume te thjeshte se si mund te realizohet kjo gje.

* * *

Kriptografia nuk eshte gje tjeter vecse procesi i transformimit te nje informacioni te caktuar ne nje forme tjeter e cila e ben informacionin te paperdorshem nese nuk rikthehet perseri ne formen e tij origjinale. Nje menyre shume e thjeshte enkriptimi i te dhenave eshte psh arkivimi i informacionit ne 'mbajtesa' komprimues, psh vendosja e nje skedari 'dokument.txt' brenda nje skedari 'dokument.zip'. Skedari .zip permban te njejtin informacion si edhe skedari .txt por ne nje forme te ndryshuar, forme e cila nuk mund te perdoret pa u riperpunuar perseri dhe te ri-perftohet skedari origjinal .txt.

Nje tjeter forme shume e thjeshte per te enkriptuar te dhena eshte qe cdo shkronje e alfabetit ne nje tekst te zevendesohet me nje shkronje tjeter qe ka nje largesi fikse ne alfabet krahasuar me shkronjen origjinale. (Me "te dhena", per thjeshtesi trajtimi qe tashti e tutje, do te konsiderojme nje grumbull te cfaredoshem teksti). Distanca fikse ne kete rast mund te sherbeje si cels, si kod, per procesin e enkriptimit.
Psh, me nje distance fikse "+3" shkronja 'a' shndrrohet ne 'd', ose 'g' -> 'j', apo 'm' -> 'p', etj. Per t'u rikthyer ne karakterin origjinal mjafton qe ky proces te behet ne rrugen e kundert: nga karakteri i dhene aplikohet distanca e kundert, "-3" dhe ne kete menyre perftohet shkronja fillestare origjinale.
Kjo eshte nje metode primitive dhe vetem ilustrative. Gjate ketij 'tour'-i ne do te trajtojme nje mekanizem me te nderlikuar se kaq, por qe perseri do te jete ne menyre ekskluzive algoritmike qe perfshin vetem veprime aritmetike. Programet moderrne enkriptues nderkohe, perdorin algoritme me veprime dhe funksione te nderlikuar matematike per gjenerimin e versionit te enkriptuar te informacionit origjinal.

<<vazhdon>>
 

gurax

Pan ignoramus
Ne nje shpjegim per termin 'kriptologji' ( http://www.britannica.com/EBchecked/topic/145058/cryptology ) eshte bere nje ilustrim me nje metode enkriptimi e cila eshte shume e njohur tashme si nje nga metodat e perdorura per enkriptim/kodimin e mesazheve dhe teksteve gjate Luftes se Dyte Boterore, ndermjet komandes dhe trupave ne front. Mesazhet kodoheshin ne menyre qe edhe po te kapeshin korrieret apo te pergjoheshin transmetimet 'Mors', mesazhi i kapur te ishte i pavlere.

Edhe une zgjodha te perdorim pikerisht kete menyre llogaritese per mekanizmin enkriptues qe do te ndertojme, per arsye si historike ashtu edhe per referencat e shumta qe mund te gjehen kudo nese ndokush qe lexon do te jete i interesuar per me tej. Eshte dicka qe sherben shume mire si 'intro'.

Ideja ne pak fjale eshte kjo:
Do te na duhet te shnderrojme shkronja ne disa shkronja te tjera, me ane te nje mekanizmi i cili do te perdore perseri disa shkronja te tjera si celsin e shndrrimit. Ne thelb, do te mberrijme ne nje proces qe nje shkronje e caktuar do te shndrrohet sipas nje tjeter shkronje - shkronja cels - dhe do te jape si rezultat nje shkronje te re qe eshte shkronja origjinale por e enkriptuar sipas celsit te dhene. Eshte e rendesishme te kuptohet se *nuk* duam te dalim jashte alfabetit te perdorur, dmth eshte e pakuptimte qe rezultati i enkriptimit te na jape nje shkronje e cila nuk eshte shkronje(!?). Ne fjale me teknike, kjo do te thote qe duam te rrime brenda bashkesise se elementeve qe dihet se perbejne mesazhin. Ne rastin e pergjithshem kjo bashkesi eshte alfabeti.

Sidoqofte, per te thjeshtezuar kete tutorial, do te biem dakord qe bashkesia e elementeve qe do te perbejne mesazhet jane shronjat a, b, c, d, e dhe f. Te tera shkronjat me te cilat ne do te punojme ne kete ilustrim duhet te jene nje prej tyre, psh: "Enkriptohet shkronja a sipas shkronjes a"; apo "Enkriptohet shkronja f sipas shkronjes b"; etj.

Keto veprime mund te behen shume thjesht nese kemi parasysh tabelen e meposhtme.

Code:
   |abcdef
   |012345
-----------
a|0|bcdefa
b|1|cdefab
c|2|defabc
d|3|efabcd
e|4|fabcde
f|5|abcdef
Numrat tregojne indeksin e seciles shkronje, e sata eshte secila shkronje ne vargun "abcdef" qe eshte bashkesia jone e karaktereve te punes.

Ne kete tabele, horizontalisht do te lexohet shkronja e dhene origjinale. Vertikalisht do te lexohet shkronja qe do te sherbeje si cels. Ne kete menyre eshte e thjeshte te marrim shkronjen e enkriptuar perfundimtare atje ku nderpritet rreshti me kollonen. Dhe shembujt me siper marrin pergjigjet:
"Shkronja a enkriptohet sipas shkronjes a dhe jep shkronjen b."
"Shkronja f enkriptohet sipas shkronjes b dhe jep shkronjen b."

<< fundi i pjeses se dyte >>
 

gurax

Pan ignoramus
:)

Vazhdojme me tej pasi te jemi familjare me parimin e punes se mekanizmit qe do te implementojme.

Duke ripermbledhur, ne qender te transformimeve qe do te bejme eshte nje karakter (shkronje) i caktuar qe do te enkriptohet sipas nje tjeter karakteri te caktuar, dhe te dy keta karaktere duhet te jene pjese e te njejtes bashkesie (vargu, alfabeti, etj).

Nuk jam i afte te shpjegoj sic duhet menyren deduktive te nxjerrjes se formules se perdorur. Vizualisht dhe ne parim, matrica me lart e qarteson procesin kur ky kryhet nga njeriu. Por per t'a bere te kuptueshem per makinen kjo duhet paraqitur me nje formule. Dhe kjo formule ka te beje me indekset (rradhen, vendosjen - e sata eshte secila shkronje ne rresht) e shkronjave te vecanta brenda vargut.
Ne rastin tone:
A-ja ka indeks 0, b-ja indeks 1, c-ja indeks 2.... f-ja indeks 5.

Duke bere disa prova me tabelen, disa raste te marra random jane:

"a sipas a jep b". (indeksi 0 sipas indeksit 0 jep indeksin 1)
"c sipas b jep e". (indeksi 2 sipas indeksit 1 jep indeksin 4)
"e sipas c jep b". (indeksi 4 sipas indeksit 2 jep indeksin 1)
... etj.

Me pak perpjekje (dhe rifreskim njohurish ne metodat e deduksionit te funksioneve matematike) do te mberrijme ne kete rregullsi te pergjithshme:

Nese: indeksi i karakterit te pare plus indeksi i karakterit te dyte plus 1 eshte vlere me e vogel ose barabarte me gjatesine totale te vargut minus 1,
atehere: indeksi i gjeneruar i kerkuar do te jete pikerisht sa shuma e ketyre indekseve plus 1.
... nese jo: indeksi i kerkuar do te jete sa shuma e indekseve fillestare plus 1, minus gjatesine totale te vargut.


Kjo rregullsi eshte ne rolin e formules matematike transformuese ne zemer te enkriptimit: cfare duhet te bejme me karakteret qe dime ne menyre qe te perftojme karakterin e enkriptuar te cilin ende nuk e dime.

Pra kemi dy numra qe perfaqesojne indekse ne nje varg; kemi vete vargun; kemi dhe formulen lidhese ndermjet informacionit qe dime dhe rezultatit te kerkuar.
Kemi cdo gje qe na duhet per te shkruar nje funksion i cili llogarit cfare duam dhe na jep te gatshem elementin rezultat te kerkuar. Funksionin po e quajme ench(), 'encrypt character'.

Code:
char ench(int ind_origjinal, int ind_kod, const char *vargu) {
        int ind_rezultat; int gjatesia;

        gjatesia = strlen(vargu);
        ind_rezultat = ind_origjinal + ind_kod + 1;

        if( ind_rezultat <= gjatesia-1 )
                return(vargu[ind_rezultat]);
        else
                return(vargu[ind_rezultat - gjatesia]);
}



<< vazhdon >>
 

gurax

Pan ignoramus
Funksioni i mesiperm ench() eshte 'motorri' i funksionimit te procesit te enkriptimit te trajtuar me lart: Ka dijeni per nje varg (bashkesi) karakteresh qe perbejne bashkesine e alafabetit te perdorur, dhe per indekset ne kete alfabet te karakterit te konsideruar mesazh dhe karakterit te konsideruar cels. Ne perfundim do te prodhoje nje karakter i cili eshte perfundimi i kerkuar, versioni i enkoduar i karakterit origjinal. Se si merret valgu i alfabetit, apo ku eshte vargu i alfabetit, apo si dhe kur perftohen indekset, te tera keto jane detyra per te cilat funksioni nuk ka dijeni, dhe nuk duhet te kete dijeni. Perftimi i ketyre informacioneve jane detyra qe permbushen nga pjese te tjera te programit, potencialisht funksione te tjera, te cilat me pas e percjellin kete informacion tek ench() per procesim.

Ketu jane treguar dy funksione, nje funksion ndihmes i quajtur findind() dhe nje 'main routine' te cilat ilustrojne keto qe u thane me lart.

Code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>


/**** perfto indeksin e karakterit c ne vargun s ****/
int findind(char c, const char *s) {
  register int a;
  a = strchr(s,c)-s;
  return(a);
}


/****************** main routine ********************/
int main(int argc, char *argv[]) {

  char elementset[] = "abcdef";
  int o, k;  /* karakteri origjinal dhe cels  */
  int oi, ki;  /* indekset e tyre  */
  int r, ri;  /* karakteri rezultant dhe indeksi */

  printf("Jep karakterin origjinal: ");
  o = getc(stdin);
  k = getc(stdin); /* buffer clean */
  printf("Jep karakterin per  cels: ");
  k = getc(stdin);

  printf("U dhane:\n -> Origjinali = %c\n -> Celsi  = %c\n", o, k);

  oi = findind( o, elementset);
  ki = findind( k, elementset);
  printf("Indekset:\n ---> originali: i \'%d\'-ti.\n ---> celsi:  i \'%d\'-ti\n", oi, ki);

  r = ench( oi, ki, elementset);  /**** Ketu ndodh procesi i enkriptimit ***/

  printf("\n===> Karakteri i koduar eshte: %c\n\n", r);

  return 0;
}


Ketu eshte treguar rezultati i marre pas disa ekzekutimesh te programit.
Code:
trantor@mw:~$ ./enctest
Jep karakterin origjinal: a
Jep karakterin per  cels: b
U dhane:
 -> Origjinali = a
 -> Celsi  = b
Indekset:
 ---> originali: i '0'-ti.
 ---> celsi:  i '1'-ti

===> Karakteri i koduar eshte: c

trantor@mw:~$ ./enctest
Jep karakterin origjinal: c
Jep karakterin per  cels: a
U dhane:
 -> Origjinali = c
 -> Celsi  = a
Indekset:
 ---> originali: i '2'-ti.
 ---> celsi:  i '0'-ti

===> Karakteri i koduar eshte: d

trantor@mw:~$ ./enctest
Jep karakterin origjinal: d
Jep karakterin per  cels: a
U dhane:
 -> Origjinali = d
 -> Celsi  = a
Indekset:
 ---> originali: i '3'-ti.
 ---> celsi:  i '0'-ti

===> Karakteri i koduar eshte: e

trantor@mw:~$ ./enctest
Jep karakterin origjinal: f
Jep karakterin per  cels: f
U dhane:
 -> Origjinali = f
 -> Celsi  = f
Indekset:
 ---> originali: i '5'-ti.
 ---> celsi:  i '5'-ti

===> Karakteri i koduar eshte: f

trantor@mw:~$

Eshte lene patrajtuar dhe si kuriozitet dhe ushtrim shkrimi i nje funksioni qe lexon informacionin e enkriptuar dhe prej tij te ri-perftoje informacionin origjinal.

Programi i realizuar eshte shume i thjeshte, por ne vetvete permban idete dhe nocionet qe qendrojne ne thelb te kriptologjise dhe kriptografise. Ne u morem me njesi baze informacioni shkronjen, karakteret ne nje varg teksti, por eshte e njejta gje edhe sikur te konsideronim paketa tcpip, switch frames, wifi frames, sektore te nje disku, inoda apo 'file allocation units' te nje disku, barcodes, optical scan patterns... etj, etj. Po e njejta gje vlen dhe per formulen transformuese ne zemer te enkriptimit. E jona ishte e thjeshte dhe e qarte, nderkohe qe ne kriptografine moderrne perdoren sisteme te tere ekuacionesh me shume variabla dhe me formulime shume e shume here me te komplikuara.

* * *

Disa referenca per reagimin dhe perceptimin e pergjithshem ne lidhje me te dhenat dhe enkriptimin ne pergjithesi:

http://www.securityweek.com/encryption-companies-rise-anxiety-over-data-mounts
http://www.networkcomputing.com/applications/data-encryption-on-the-rise/a/d-id/1318719
http://www.net-security.org/secworld.php?id=18251
 

gurax

Pan ignoramus
Shkeputur nga nje material qe po lexoj:

"... if p(t,A) is the probability of some substring t occuring in A, then a mimic function f, recodes A so that p(t,f(A)) approximates p(t,B) for all strings t of length less than some n. This paper describes the algorithm for computing mimic functions and compares the algorithm with its functional inverse, Huffman coding."

Gjenialiteti qendron vertet ne gjerat me te thjeshta dhe evidente, por qe askush nuk u ndal t'i shihte me pare!
 

gurax

Pan ignoramus
Program real i perfunduar, i bere sipas shembullit te trajtuar gjate shkrimeve: 1, 2, 4, 5.

Code:
provat@computer:~$ cryptman

  CRYPTMAN-Version1.00

Usage:  cryptman -command srcfile destfile codeword
Type: cryptman -h  for help.
provat@computer:~$
provat@computer:~$ cryptman -h

  CRYPTMAN-Version1.00
Usage:  cryptman -command srcfile destfile codeword
CRYPTMAN is an encrypting/decrypting program for plain text files,
which takes the working files and commands as command line parameters.
The Parameters:
1. -command (specifies action to be done)
2. sourcefile (the file to be encrypted)
3. destinationfile (the file where the encrypted version is to be stored)
4. codeword (any word, it will be used as an encryption/decryption keycode)
The allowed commands are:
-e (encrypt), -d (decrypt), -h (help page, this one)
  EXAMPLES:
A) cryptman -e afile.txt afile.cry thisisthecode
Here the AFILE.TXT will be encrypted using the 'thisisthecode' codeword
and the encrypted file will have the name AFILE.CRY
B) cryptman -d afile.cry afile.tx2 codenr2
This atempt to get a decrypted file AFILE.TX2 from AFILE.CRY will produce
garbage as the codewords are different. Note that with the -d command,
if you drop the destinationfile, the output is put on the screen.
C) cryptman -e anothercode
This gets the standard input and encodes it to the standard output. This is
useful when redirecting standard I/O and using CRYPTMAN with other programs
NOTES: This is a simple version of CRYPTMAN, it does not handle the * and ?
characters, and it doesn't warn when overwriting existing files.
provat@computer:~$
provat@computer:~$ cryptman -e KyEshtePasswordi

  CRYPTMAN-Version1.00
Opened working files, now processing....
Fjali cfaredo qe do te transformohet.
EOzG~&B:`ANS`%(D3F*!+3"*%Q|&IT~\T}JO=O
..closing files...done.
provat@computer:~$
provat@computer:~$ cryptman -d KyEshtePasswordi

  CRYPTMAN-Version1.00
Opened working files, now processing....
EOzG~&B:`ANS`%(D3F*!+3"*%Q|&IT~\T}JO=O
Fjali cfaredo qe do te transformohet.
h
..closing files...done.
provat@computer:~$

Tani ngelet vetem te paketohet ne nje file cryptman-1_1.00_amd64.deb dhe ta leshoj gati per instalim. :p
 

gurax

Pan ignoramus
Eshte nje program qe quhet "varri". Kete emer e ka sepse sherben si nje varr, apo nje varrmihes, ne rolin e atij qe varros informacionin per te mos e gjetur, ne gropa te thella dhe te errta dixhitale.

Code:
NAME
  Tomb - the Crypto Undertaker

SYNOPSIS
  tomb [options] command [arguments]

DESCRIPTION
  Tomb  is an application to manage the creation and access of encrypted storage files: it can
  be operated from commandline and it can integrate with a user's graphical desktop.

  Tomb generates encrypted storage files to be opened and closed using their associated  keys,
  which are also protected with a password chosen by the user. To create, open and close tombs
  a user will need super user rights to execute the tomb commandline utility.

  A tomb is like a locked folder that can be safely transported and hidden in a filesystem; it
  encourages users to keep their keys separate from tombs, for instance keeping a tomb file on
  your computer harddisk and its key file on a USB stick.

Edhe nje demonstrim ne pune.
Gerrmohet nje varr, te cilit i vihet nje emer. Me pas farketojme nje cels.
tomb1.png


Ketu me poshte, bejme qe varri qe gerrmuam dhe celsi qe farketuam te jene pjese e njeri tjetrit, varri duhet te hapet vetem me ate cels.
Ne fund behet edhe nje prove, e hapim varrin me celsin e vet dhe me pas e mbyllim perseri.
tomb2.png
Varri u mbyll: kockat tuaja do te prehen ne paqe.
 
Top