PALUBA
August 11, 2022, 06:01:50 pm *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: Pravilnik foruma PALUBAinfo
 
   Home   Help Login Register  
Del.icio.us Digg FURL FaceBook Stumble Upon Reddit SlashDot

Pages:  1 2 3 [4] 5 6 7 8 9   Go Down
  Print  
Author Topic: Криптографија  (Read 45907 times)
 
0 Members and 1 Guest are viewing this topic.
Rade
Administrator
kapetan bojnog broda
*
Online Online

Gender: Male
Posts: 16 947


WWW
« Reply #45 on: May 11, 2016, 11:04:45 pm »

Морам приметити да ме неки овде подсећају на моју покојну бабу. Читају (чују) само оно што им одговара, а ако то ипак није то, претварају се да јесте.

Ужаснут сам сазнањем да има људи који намерно неће да се откаче од Другог Светског Рата.



Veseline Dakovicu, ti me podsecas na banovanog clana ovog foruma... ako nastavis ovako.
Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #46 on: May 12, 2016, 03:01:26 am »

Не бих рекао да тему посећују лаици, а не бих никога ни да потцењујем. Претпоставићемо да се људи нису посебно интересовали што је и разумљиво и очекивано.

Али, сада ћу ја ефективно елиминисати постојање лаика на овој теми. Ово је нешто прекоредно, али је једноставно.

Годинама уназад, када сте знајући или не знајући користили SSL/TSL протоколе, користили сте и RC4 метод енкрипције (не обавезно и не само тај метод.) Слична ситуација је и са SSH, BitTorrent, RDP, SASL, Skype (у модификованом облику).

Ево, ово је нешто што би требало да је свима познато. Значи, блиско.

RC4 је рад Рона Ривеста из 1987. године који је процурео у јавност 1994. године. Постоје још и RC2, RC5 и RC6. Рон Ривест је тек 2014. године потврдио да је аутор ове шифре. Након откривених слабости, ова шифра је забрањена за употребу у TLS протоколу , као несигурна, због низа успешних напада на стрим.

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

RC4 генерише псеудо-случајан низ битова, тзв. "keystream", односно кључ који се користи и за енкрипцију и за декрипцију, па је ово и симетрична шифра. Користи екслузивну ИЛИ функцију (ХОР). RC4 се и даље користи на неколико оперативних система као генератор случајних бројева.

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

Захтева 256 бајта за иницијализацију стања, n бајтова за кључ и 3 целобројна податка.

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

Да, то је BASIC. Програмски језик за почетнике, а одабрана верзија је QBASIC, који је био део DOS оперативног система, али је у другим облицима и даље присутан у широкој употреби.

Отворите едитор текста, препишите доле приложени текст, и снимите текст са екстензијом .BAS

Code:
DECLARE SUB createiv (outfile!)
DECLARE FUNCTION askmode! ()
DECLARE SUB encrypt (infilename$, outfilename$)
DECLARE SUB decrypt (infilename$, outfilename$)
DECLARE SUB readiv (file!)
DECLARE FUNCTION askinput$ ()
DECLARE FUNCTION askoutput$ ()
DECLARE SUB askkey ()
DECLARE SUB init ()
DECLARE FUNCTION cipher! (byte!)

DIM SHARED state(255) AS INTEGER
DIM SHARED keydata(255) AS INTEGER
DIM SHARED keylength AS INTEGER

infilename$ = askinput
outfilename$ = askoutput
  
IF askmode = 0 THEN
        decrypt infilename$, outfilename$
ELSE
        encrypt infilename$, outfilename$
END IF

FUNCTION askinput$

askinput:
        INPUT "Ulazni fajl: ", tmp$
      
        IF tmp$ = "" THEN
                GOTO askinput
        END IF

        askinput$ = tmp$

END FUNCTION

SUB askkey

enterkey:
        INPUT "Unesi kljuc: ", keystring$

        keylength = LEN(keystring$)
        IF keylength = 0 OR keylength > 246 THEN
                GOTO enterkey
        END IF

        FOR i = 0 TO (keylength - 1)
                keydata(i) = ASC(MID$(keystring$, (i + 1), 1))
        NEXT i

END SUB

FUNCTION askmode

        answer = -1
        PRINT "Enkripcija/Dekripcija [e/d]?"
askmode:
        char$ = INKEY$
        IF char$ = "d" OR char$ = "D" THEN
                answer = 0
        END IF
        IF char$ = "e" OR char$ = "E" THEN
                answer = 1
        END IF

        IF answer = -1 THEN GOTO askmode
        askmode = answer
      
END FUNCTION

FUNCTION askoutput$

askoutput:
        INPUT "Izlazni fajl: ", tmp$

        IF (tmp$ = "") THEN
                GOTO askoutput
        END IF

        askoutput$ = tmp$

END FUNCTION

FUNCTION cipher (byte)

        STATIC i, j
        i = (i + 1) MOD 256
        j = (j + state(i)) MOD 256
        SWAP state(i), state(j)
        n = (state(i) + state(j)) MOD 256
        ret = byte XOR state(n)
        
        cipher = ret

END FUNCTION

SUB createiv (outfile)

        RANDOMIZE TIMER

        FOR i = 0 TO 9
                byte = RND * 256
                keydata(keylength + i) = byte
                PRINT #outfile, CHR$(byte);
        NEXT i
        keylength = keylength + 10

END SUB

SUB decrypt (infilename$, outfilename$)
      
        infile = FREEFILE
        OPEN infilename$ FOR BINARY AS #infile
        outfile = FREEFILE
        OPEN outfilename$ FOR OUTPUT AS #outfile

        askkey
        readiv infile
        init

        DO
                char = ASC(INPUT$(1, #infile))
                cchar = cipher(char)
                PRINT #outfile, CHR$(cchar);
        LOOP UNTIL LOC(infile) = LOF(infile)

        CLOSE infile
        CLOSE outfile

END SUB

SUB encrypt (infilename$, outfilename$)
      
        infile = FREEFILE
        OPEN infilename$ FOR BINARY AS #infile
        outfile = FREEFILE
        OPEN outfilename$ FOR OUTPUT AS #outfile

        askkey
        createiv outfile
        init

        DO
                char = ASC(INPUT$(1, #infile))
                cchar = cipher(char)
                PRINT #outfile, CHR$(cchar);
        LOOP UNTIL LOC(infile) = LOF(infile)

        CLOSE infile
        CLOSE outfile


END SUB

SUB init

        FOR i = 0 TO 255
                state(i) = i
        NEXT i
      
        j = 0
        FOR i = 0 TO 255
                n = i MOD keylength
                j = (j + state(i) + keydata(n)) MOD 256
                SWAP state(i), state(j)
        NEXT i

END SUB

SUB readiv (file)

        FOR i = 0 TO 9
                byte = ASC(INPUT$(1, #file))
                keydata(keylength + i) = byte
        NEXT i
        keylength = keylength + 10

END SUB

Сада могу са сигурношћу да претпоставим да нема више лаика, већ само незаинтересованих. RC4 је и даље у употреби осим што је искључен из критичних примена као што су раније верзије бежичног протокола 802.11.

Све ово може, уз мале измене наравно, бити реализовано и на ZX-81, ZX-Spectrum, C-64, Amiga, Amstrad и томе слично, ако их негде пронађете, а може бити имплементирано и у Excel рецимо.

Наравно, постоје и модификације, разне варијанте алгоритма које користе веће кључеве, већи вектор иницијализације, али је за то ипак потребан С/С++ или какав други програмски језик јер је криптографија мало незгодна без поинтера.

Тема се ипак односи на криптографију и разне шифре, а имаће и разне закључке.

Сада могу рећи да сам успешно пренео тему у 21. век.

 (ваљда нисам нешто забрљао, са бејзиком имам утисак као да пишем кроз боксерске рукавице)





« Last Edit: May 12, 2016, 10:51:58 am by Trifko » Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #47 on: May 12, 2016, 05:08:03 pm »

Изгледа да ми неко помаже.

Оставио сам програмски код у телу поруке као обичан текст, а неко се потрудио да исти код упакује у посебан објекат.

Захваљујем Трифку на уређивању текста.

Искључио сам скрипте тако да су "дугмићи пречице" такође искључени, укључујући и "#".

« Last Edit: May 12, 2016, 05:20:40 pm by VeselinDakovic » Logged
Trifko
Prijatelj foruma
poručnik korvete
*
Offline Offline

Gender: Male
Posts: 3 814


Од свих ратника најјача су два: време и стрпљење.


« Reply #48 on: May 12, 2016, 05:56:14 pm »

Изгледа да ми неко помаже.

Оставио сам програмски код у телу поруке као обичан текст, а неко се потрудио да исти код упакује у посебан објекат.

Захваљујем Трифку на уређивању текста.

Искључио сам скрипте тако да су "дугмићи пречице" такође искључени, укључујући и .



Ја сам едитовао поруку QBASIC код сам убацио у ББЦ.
Logged
JASON
Prijatelj foruma
kapetan korvete
*
Offline Offline

Gender: Male
Posts: 6 653



« Reply #49 on: May 12, 2016, 09:12:44 pm »

31 14 32 42 14 34 33    34 63 32 63 61 33 31 63     13 14 11    15 42 11    32 33    43 14 12 11 35 63 11

12 11 43 54 22 14 34    23 14 32 11 31
Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #50 on: May 12, 2016, 11:09:19 pm »

Личи на RC4. Не знамо кључ. Стрим је кратак.

Остаје претпоставка да су у питању речи, а из тога произилази да нам ја на располагању тзв. "dictionary attack".

А може да буде и било шта друго.

Приложени код је модификација оригиналне шифре, и то CS-1 RC4, тако да би за напад био потребан дугачак стрим или преко 1000 порука које користе исти кључ.

Постоји и CS-2 RC4.
« Last Edit: May 12, 2016, 11:28:44 pm by VeselinDakovic » Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #51 on: May 13, 2016, 02:00:12 am »

RC4 (Ron's Code 4) као метод енкрипције је више од деценије био присутан у вашој свакодневници.

Такође видите да нуди само РЕЛАТИВНУ сигурност. Исто је и са осталим методима енкрипције.

Нападач може да буде потпуно пасиван и неприметан, да слуша, и да након одређеног времена пробије енкрипцију.

Skype користи "модификовану" (смути па проспи) верзију ове шифре за видео позиве, а слабост је предочена јавности након ... После кажу да сам ја наопак, и свашта нешто.

Главни проблем код симетричних шифара је дистрибуција кључа.

Раније смо користили поштапалицу у облику дневне књиге кључева, крили се по собама једни од других као да смо лопови. Закрпа. Није то право решење.

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

Следеће о чему ћу писати су RC5 и RC6 шифре.

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

И иако су модерне, нису добре. Имају рупу.

Нема непробојних шифри, само лењих аналитичара.



Logged
vathra
potporučnik
*
Offline Offline

Posts: 2 358



« Reply #52 on: May 13, 2016, 08:54:56 am »

31 14 32 42 14 34 33    34 63 32 63 61 33 31 63     13 14 11    15 42 11    32 33    43 14 12 11 35 63 11

12 11 43 54 22 14 34    23 14 32 11 31
QTC ZPE

22 14     61 33    32 33    31 14    48 63 31 63    48 33 32 61 33 11        

35 33 14 11
« Last Edit: May 13, 2016, 09:02:21 am by vathra » Logged
vathra
potporučnik
*
Offline Offline

Posts: 2 358



« Reply #53 on: May 13, 2016, 09:00:58 am »

Личи на RC4.
Grin
Ово је ипак нека основа.

Нема непробојних шифри, само лењих аналитичара.
Непробојна шифра је измишљена пре скоро 100 година, и кориштена је још пре Другог светског рата.
Чехословачка је била прилично напредна у имплементирању исте, мада су је користиле и друге земље.
НОВЈ ју је користила од половине 1944. на дивизијском нивоу, и постоји немачки извештај који констатује да више не могу да читају њихов саобраћај.
Једини начин да се пробије су грубе грешке у коришћењу и заплењивање дела документације.

Данашњи развоји криптографије се своде на олакшавање дистрибуције кључа и повећања сигурности иако се користе слаби кључеви.
Logged
JASON
Prijatelj foruma
kapetan korvete
*
Offline Offline

Gender: Male
Posts: 6 653



« Reply #54 on: May 13, 2016, 09:45:28 am »

22 14     61 33    32 33    31 14    48 63 31 63    48 33 32 61 33 11        

35 33 14 11
Наравно да нисам. Била је то, примерено теми, добродошлица новом члану.
Logged
vathra
potporučnik
*
Offline Offline

Posts: 2 358



« Reply #55 on: May 13, 2016, 09:48:18 am »

Наравно да нисам. Била је то, примерено теми, добродошлица новом члану.
Заборавио сам да додам трол лице у питању Smiley
Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #56 on: May 13, 2016, 10:06:07 am »

OTP ("one-time-pad") је стари метод енкрипције, једини за кога постоји математички доказ да је потпуно сигуран. Најпознатија употреба је била слање криптотелеграма совјетске обавештајне службе, и то из САД, у време када СССР још увек није направио своју прву фисиону бомбу.

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

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

Наставићемо са методима који су у употреби.
Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #57 on: May 13, 2016, 01:00:03 pm »

Увод ове теме је превазишао семинарске радове који се срећу током академског образовања,  само део који је написао Витез Која довољан као семинарски рад, а садржај ће бити на нивоу каквог научног чланка. То не значи да ће изложено бити комплексно, већ да је сама област прилично непозната ширем кругу, и да има много(!) преписивања, односно плагијата.

Следеће о чему ћу писати је рад Рона Ривеста из 1987. године, симетрична блок шифра RC2 (ARC2) која је развијена за потребе компаније LOTUS, а одобрена од стране NSA. До 1996. године RC2 (ARC2) је држана у тајности, а затим је изворни код анонимно постављен на интернет.

RC2 је планирана за употребу на 16-битним процесорима над 64-битним блоковима података, као брза замена за компромитовану DES шифру. Посебно код ове шифре је могућност избора величине кључа. Током година RC2 се широко користио а најпознатија употреба је у S/MIME стандарду.

У наставку ће бити приказана структура ове шифре, а затим и могући напади.

Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #58 on: May 13, 2016, 05:10:50 pm »

Следи код који су објавили SoftIce, D86 и CodeView

Code:
#include <string.h>
#include <assert.h>


void rc2_keyschedule( unsigned short xkey[64],
                      const unsigned char *key,
                      unsigned len,
                      unsigned bits )
        {
        unsigned char x;
        unsigned i;
        /* tabela permutacija od 256 elemenata */
        static const unsigned char permute[256] = {
            217,120,249,196, 25,221,181,237, 40,233,253,121, 74,160,216,157,
            198,126, 55,131, 43,118, 83,142, 98, 76,100,136, 68,139,251,162,
             23,154, 89,245,135,179, 79, 19, 97, 69,109,141,  9,129,125, 50,
            189,143, 64,235,134,183,123, 11,240,149, 33, 34, 92,107, 78,130,
             84,214,101,147,206, 96,178, 28,115, 86,192, 20,167,140,241,220,
             18,117,202, 31, 59,190,228,209, 66, 61,212, 48,163, 60,182, 38,
            111,191, 14,218, 70,105,  7, 87, 39,242, 29,155,188,148, 67,  3,
            248, 17,199,246,144,239, 62,231,  6,195,213, 47,200,102, 30,215,
              8,232,234,222,128, 82,238,247,132,170,114,172, 53, 77,106, 42,
            150, 26,210,113, 90, 21, 73,116, 75,159,208, 94,  4, 24,164,236,
            194,224, 65,110, 15, 81,203,204, 36,145,175, 80,161,244,112, 57,
            153,124, 58,133, 35,184,180,122,252,  2, 54, 91, 37, 85,151, 49,
             45, 93,250,152,227,138,146,174,  5,223, 41, 16,103,108,186,201,
            211,  0,230,207,225,158,168, 44, 99, 22,  1, 63, 88,226,137,169,
             13, 56, 52, 27,171, 51,255,176,187, 72, 12, 95,185,177,205, 46,
            197,243,219, 71,229,165,156,119, 10,166, 32,104,254,127,193,173
        };

        assert(len > 0 && len <= 128);
        assert(bits <= 1024);
        if (!bits)
                bits = 1024;

        memcpy(xkey, key, len);

        /* Faza 1: Prosirivanje ulaznog kljuca na 128 bajta */
        if (len < 128) {
                i = 0;
                x = ((unsigned char *)xkey)[len-1];
                do {
                        x = permute[(x + ((unsigned char *)xkey)[i++]) & 255];
                        ((unsigned char *)xkey)[len++] = x;
                } while (len < 128);
        }

        /* Faza 2 - smanjivanje efektivne duzine kljuca */
        len = (bits+7) >> 3;
        i = 128-len;
        x = permute[((unsigned char *)xkey)[i] & (255 >> (7 & -bits))];
        ((unsigned char *)xkey)[i] = x;

        while (i--) {
                x = permute[ x ^ ((unsigned char *)xkey)[i+len] ];
                ((unsigned char *)xkey)[i] = x;
        }

        /* Faza 3 - kopiranje u niz xkey[] u "little-endian" oblik */
        i = 63;
        do {
                xkey[i] =  ((unsigned char *)xkey)[2*i] +
                          (((unsigned char *)xkey)[2*i+1] << 8);
        } while (i--);
        }

/**********************************************************************\
* Enkripcija bloka od 8 bajta upotrebom datog kljuca                                                         *
\**********************************************************************/

void rc2_encrypt( const unsigned short xkey[64],
                  const unsigned char *plain,
                  unsigned char *cipher )
        {
        unsigned x76, x54, x32, x10, i;

        x76 = (plain[7] << 8) + plain[6];
        x54 = (plain[5] << 8) + plain[4];
        x32 = (plain[3] << 8) + plain[2];
        x10 = (plain[1] << 8) + plain[0];

        for (i = 0; i < 16; i++) {
                x10 += (x32 & ~x76) + (x54 & x76) + xkey[4*i+0];
                x10 = (x10 << 1) + (x10 >> 15 & 1);
               
                x32 += (x54 & ~x10) + (x76 & x10) + xkey[4*i+1];
                x32 = (x32 << 2) + (x32 >> 14 & 3);

                x54 += (x76 & ~x32) + (x10 & x32) + xkey[4*i+2];
                x54 = (x54 << 3) + (x54 >> 13 & 7);

                x76 += (x10 & ~x54) + (x32 & x54) + xkey[4*i+3];
                x76 = (x76 << 5) + (x76 >> 11 & 31);

                if (i == 4 || i == 10) {
                        x10 += xkey[x76 & 63];
                        x32 += xkey[x10 & 63];
                        x54 += xkey[x32 & 63];
                        x76 += xkey[x54 & 63];
                }
        }

        cipher[0] = (unsigned char)x10;
        cipher[1] = (unsigned char)(x10 >> 8);
        cipher[2] = (unsigned char)x32;
        cipher[3] = (unsigned char)(x32 >> 8);
        cipher[4] = (unsigned char)x54;
        cipher[5] = (unsigned char)(x54 >> 8);
        cipher[6] = (unsigned char)x76;
        cipher[7] = (unsigned char)(x76 >> 8);
        }

/**********************************************************************\
* Dekripcija bloka od 8 bajta upotrebom datog kljuca                                                         *
\**********************************************************************/

void rc2_decrypt( const unsigned short xkey[64],
                  unsigned char *plain,
                  const unsigned char *cipher )
        {
        unsigned x76, x54, x32, x10, i;

        x76 = (cipher[7] << 8) + cipher[6];
        x54 = (cipher[5] << 8) + cipher[4];
        x32 = (cipher[3] << 8) + cipher[2];
        x10 = (cipher[1] << 8) + cipher[0];

        i = 15;
        do {
                x76 &= 65535;
                x76 = (x76 << 11) + (x76 >> 5);
                x76 -= (x10 & ~x54) + (x32 & x54) + xkey[4*i+3];

                x54 &= 65535;
                x54 = (x54 << 13) + (x54 >> 3);
                x54 -= (x76 & ~x32) + (x10 & x32) + xkey[4*i+2];
               
                x32 &= 65535;
                x32 = (x32 << 14) + (x32 >> 2);
                x32 -= (x54 & ~x10) + (x76 & x10) + xkey[4*i+1];

                x10 &= 65535;
                x10 = (x10 << 15) + (x10 >> 1);
                x10 -= (x32 & ~x76) + (x54 & x76) + xkey[4*i+0];

                if (i == 5 || i == 11) {
                        x76 -= xkey[x54 & 63];
                        x54 -= xkey[x32 & 63];
                        x32 -= xkey[x10 & 63];
                        x10 -= xkey[x76 & 63];
                }
        } while (i--);

        plain[0] = (unsigned char)x10;
        plain[1] = (unsigned char)(x10 >> 8);
        plain[2] = (unsigned char)x32;
        plain[3] = (unsigned char)(x32 >> 8);
        plain[4] = (unsigned char)x54;
        plain[5] = (unsigned char)(x54 >> 8);
        plain[6] = (unsigned char)x76;
        plain[7] = (unsigned char)(x76 >> 8);
        }

Делује ми да је код у реду. Ово је RC2.

Moже се (уз мало петљања) прилагодити и за раније поменути QBASIC, али и за друге програмске језике, укључујући и асемблер.
Logged
VeselinDakovic
mladji vodnik
*
Offline Offline

Posts: 164



« Reply #59 on: May 14, 2016, 02:23:43 am »

Постоје два одвојена дела приликом употребе RC2 алгоритма.

Први је процедура "key expansion" која узима кључ који даје корисник дужине од 1 до 128 бајта и параметар који одређује ефeктивну дужину кључа за енкрипцију.

Од ових података се формира низ К( ) који садржи 64 16-битна податка (речи). Затим се врши енкрипција 64-битног блока текста употребом низа К( ).

Енкрипцију чине две врсте пролаза-рунди, прва се назива MIXING а друга MASHING.

Експанзија кључа и енкрипција се ослањају на табелу замена под називом PITABLE која одређује случајну пермутацију целобројних вредности од 0 до 255 а која је изведена експанзијом броја ПИ.

(Повремено прочитате како је неки Јапанац израчунао број ПИ на милион децималних позиција, а сада знате и зашто се тиме бавио.)

Будући да ова шифра користи померачке операције, морамо усвојити симболе којима ћемо описати операције над подацима који се енкриптују.

x <<< k  је ротација 16-битне бинарне речи x за k позиција улево

&  је логичка И операција

XOR је екслузивна ИЛИ функција

~ је комплемент

+ је сабирање по модулу 2^16


Проширивање (експанзија) кључа

Током процедуре проширивања кључа у употреби су и операције на 8-битним и на 16-битним подацима.

Треба схватити да је кључ 16 х 64 бита. Или 64 х 16 бита. Свеједно.

а) за операције над 16-битним речима кључ ћемо означавати са  К (0)... K (63)
б) за операције на 8-битним подацима кључ ћемо означавати са  L (0)...L (127)

То је један те исти низ битова, што значи да је

 K = L[2i] + 256 x L[2i + 1]

Претпоставимо да је Т бајтова кључа добијено од стране корисника при чему је 1 <= Т <= 128

Процедура смешта ових Т бајтова на позиције L[0] ... L[T - 1] у бафер кључа.

Без обзира на број бајтова Т, алгоритам има максималну ефективну дужину кључа у битовима коју означавамо са Т1.

Ефективна дужина кључа у бајтовима је Т8 и маска ТМ на основу дужине кључа у битовима Т1 одређују се на следећи начин:

Т8 = Т1/8

ТМ = 255 mod 2^(8(1-T8) + T1)    (овде + означава обично сабирање)

Проширење кључа се састоји од две следеће петље и међукорака:

1.

  for i = T, T+1 .... 127 do
    L = PITABLE[L[i - 1] + L[i - T]]  (овде + означава сабирање по модулу 2^16)

2.

   L[128 - T8] = PITABLE[L[128 - T8] & TM]  (цвиченцуг)


3.

   for i = 127 - T8, .... 0 do
     L = PITABLE[L[i + 1] XOR L[i + T8]]


После овога низ K[0]...K[63] садржи 64 16-битне речи кључа за енкрипцију.

Ово је све једноставно, скоро да може на прсте да се срачуна.
« Last Edit: May 14, 2016, 02:31:41 am by VeselinDakovic » Logged
Pages:  1 2 3 [4] 5 6 7 8 9   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines
Simple Audio Video Embedder

SMFAds for Free Forums
Valid XHTML 1.0! Valid CSS!
Page created in 0.029 seconds with 22 queries.