algoritmi.105dr.grba,
-> #85, niklaus>> Stvar je sledeća... Ljudi od kojih će se, u jednom trenutku
>> njihovog srećnog programerskog života, tražiti da naprave algoritam
>> za sigurno čuvanje šifara, bi trebalo da su dovoljno inteligentni
>> da pronađu dovoljno siguran algoritam, ili da su jednostavno u
>> stanju da od ponuđenih algoritama, nađu onaj sa najmanjom
>> verovatnoćom za "provalu".
Valjda imam poznanike matematičare od kojih bih tražio da mi naprave
valjan matematički model.
algoritmi.104dr.grba,
-> #83, nkbog>> 1*K1+2*K2+3*K3+4*K4 = 706 (2C2h), gde su K1 do K4 ASCII kodovi
Da, tačno je.
>> p.s. Program je bio PKLITE-ovan,
Da, tačno je.
>> pisan u nekakvom Borlandovom paketu (paskalu?)
Turbo Pascal 6.0 (:
>> p.p.s. Nešto posle 12h sam završio poziv Sezama,
>> u 12:40 pišem ovu poruku, ukupno vreme do nalaženja prve lozinke je
Skidam kapu i priznajem poraz. Razbi čovek program k'o Panta pitu.
P.S. A valjanost programa branim i dalje, shodno potrebi. I
shvatite već jednom šta sam hteo time da kažem.
P.P.S. 'Ajde da bar nešto da svi izvučemo pouku. Da li si u razbijanju
koristio znanje o algoritmu transformacije? Da li si išao redom
od dužine 1, pa 2, pa 3, pa našao na 4 (lozinka zbilja ima 4 znaka,
ali nije nijedna od navedenih; baš bi bilo zanimljivo istražiti
koliko ih ima, kao išta bi se desilo da je funkcija case sensitive)?
Koliko bi razbijač radio da je lozinka zbilja bila duga 20 karaktera?
Pozdrav, Grba
algoritmi.106dr.grba,
-> #87, peca.st>> Jer, cilj je bio da se iz otiska ne može naći šifra koja će
>> dati takav otisak!
Nije tačno.
algoritmi.107m.hristodulo,
-> #73, dejanr>> Mislim da cemo najlakse to naci ako neko izvadi
>> odgovarajuci deo koda iz source-a za neki PD
>> Unix.
386BSD je PD Unix, dakle besplatan je, ali
se zabranjuje njegov izvoz izvan granica USA,
zapravo njegov algoritam za kriptovanje lozinki.
Ipak, u BG postoji jedan takav BSD, ali ne bih smeo
reci kod koga.
algoritmi.108spantic,
-> #107, m.hristodulo> 386BSD je PD Unix, dakle besplatan je, ali
> se zabranjuje njegov izvoz izvan granica USA,
Zanimljivo je da se ni na samom Internetu, na kome teoretski važe
američka pravila igre to niko ne poštuje. Podršku za mnoge zabranjene
stvari iz Amerike se može naći na dosta mesta.
algoritmi.109peca.st,
-> #96, snemcev!-> Ne, nemoram. Ni uz jedan paket nisi dobio
!-> papirić na kome piše "Ulazna lozinka kao
!-> rezultat transformacije daje broj
!-> 908213-3126".
Meni se sve čini da ti ne znaš o čemu se diskutuje ovde. :(
Ako ne mogu da dođem do rezultata transformacije, onda transformacija
nema efekta, čak ima kontra efekat! Jer, ako se rezultat tako dobro
sakrije da ne mogu da dođem do njega, zašto onda original nije tako
dobro sakriven? Još jednom: poenta je da _NIKO_ ko zna rezultat transformacije,
pa čak i onaj ko zna algoritam koji je korišćen, ne može lako da dođe
do originala koji daje isti takav rezultat.
Što se tiče provaljivanja logon.exe on je već provaljen i bez rezultata
transformacije, verovatno tako što je u samom programu nađen taj rezultat.
Ti si u logon.exe morao da zapamtiš rezultat pa da ga porediš kasnije,
tako da si nam ipak dao ono što smo tražili. :) A kako se ispostavilo da je
traženi original sastavljen samo od četiri karaktera, čak nije bilo potrebno
znati rezultat, moglo se ispitati i "buldožer" metodom.
Peđa.
algoritmi.110peca.st,
-> #106, dr.grba!-> Nije tačno.
Ajd mi argumentuj zašto nije tačno.
Ja sam argumentovao zašto mislim da je tako,
pa bih voleo da čujem i suprotnu argumentaciju.
Peđa.
algoritmi.111peca.st,
-> #103, dr.grba!-> Nisam proverava, nije ni bitno. Jasno je
!-> da algoritam ne daje jednoznačne
!-> rezultate. Naravno, ako se lozinka koja
!-> prođe pronađe, priznajem i nju.
Algoritam koji daje jednoznačne rezultate imao bi i inverzan
algoritam, tako da ne bi imao smisla.
Međutim, problem ovog algoritma je što je procenat broja mogućih
lozinki koji prolaze preveliki!
Primerom koji sam naveo hteo sam da pokažem da algoritam daje isti
rezultat za neke vrlo slične šifre, koje u sebi ne sadrže nikakve
"egzotične" znake. Recimo CRC algoritam daje iste rezultate najčešće
za neke totalno "leve" znake (nešto nalik na đubre) koji nemaju veze
sa onim pravim (osim što daje isti otisak :), a opet najčešće
takvi "levi" znaci uopšte nisu dozvoljeni u šifri, pa bi se uslovno
moglo reći da je CRC algoritam "jednoznačan" a (naravno) ne postoji inverzan
algoritam. Hoću da kažem da ćeš teško naći dva stringa sastavljena od
(recimo) samo malih slova i tačke koji posle CRCa daju isti otisak.
Postoji "ogroman" broj stringova (sastavljenih od malih slova i tačke)
koji posle sume a(i)*i daju isti otisak.
Peđa.
algoritmi.112zolika,
-> #79, peca.st
>> If a) Then
>> Zolika je pomenuo da mu treba nešto što će od LOZINKE (koja ima
>> recimo n karaktera) napraviti 4bajtni "otisak". To znači, da kad
>> neko unese lozinku, ona prolazi kroz isti taj algoritam, tako dobijeni
>> otisak se proverava sa originalnim (koji je verovatno na disku) i ako
>> je provera prošla Ok, korisnik lozinke se pušta dalje. Svi ovde pomenuti
Tačno! Dobro si razumeo. Treba mi neka transformacija za lozinku na...
da ne pričam, već i vrapci znaju za šta.
algoritmi.113zolika,
-> #75, kale
>> Upravo je fora da se zolika sam namuči (more tu uopšte nema muke),
>> i da niko drugi ne zna algoritam...
Hm, pošto poruke čitam "na preskok" (zbog tel. računa) - OK, nema problema,
meni nije teško da nažvrljam neku petljicu punu XORovanja, ORovanja i ostalih
logičkih zavrzlama eda bi od ASCII lozinke napravio nekih 2-4 bajtova. No,
drugi princip programiranja koji smo naučili na prvoj godini studija bio je:
2. NE IZMIŠLJATI TOPLU VODU.
Ako neko zna algoritam, a neće da mi kaže - u redu, ne mogu ga puškom natera-
ti. Ali, mislio sam da bi možda bolje bilo da se malo manje mučim tu, a malo
više na nekom drugom mestu.
P.S.: Prvi princip programiranja koji smo naučili bio je:
2. KORISNIK PROGRAMA JE STANDARDNI IDIOT. (zainteresovanima nudim na
uvid beleške iz predmeta "Uvod u programiranje" sa prve godine studija na
informatičkom smeru PMF-a u Novom Sadu).
Da bi zabava bila potpuna - profesor koji nam je to predavao je
moj g-din mentor - kod njega rfadim diplomski...
algoritmi.114pedjak,
-> #96, snemcev> ;Name CRC32.ASM
Hajde, pošalji.
algoritmi.115niklaus,
-> #84, a.kircanski(:> Hm, gde ima da se nađe taj PD unix?
Na kioscima "Borbe"! (;
Nego ozbiljno - pitaj ljude sa FFSa...
(:niklaus:)
algoritmi.116niklaus,
-> #94, kale(:> Trebali da budu dovoljno inteligentni??? žovek je bio
(:> dovoljno inteligentan da zatraži savet. Najbolje mu možemo
(:> pomoći ako mu damo dobar
Ma ništa ja njemu ne poričem. Inteligenciju i njegov integritet
valjanog programera ponajmanje...
Jednostavno je dobio okvirni algoritam i odgovarajuća objašnjenja
vezano za tebu, i dalje će sigurno znati sam...
Problem je što mi Srbi o'ma' se poprimamo i tražimo mane u nečijoj
ideji (konkretno u dr.grbinoj formuli za izradu CRCa). Zato smo ga i tupili
dobrih 50 poruka. (;imam blagi osećaj da ima još)
(:niklaus:)
algoritmi.117niklaus,
-> #105, dr.grba(:> Valjda imam poznanike matematičare od kojih bih tražio da mi
(:> naprave valjan matematički model.
Ma samo reci... (: (mada nisi imao mene na umu)
(:niklaus:)
algoritmi.118niklaus,
-> #99, debelijencija(:>! =?> Ovo me podseća na algoritme, koje koriste simulatori
(:>! realnih =?> (prirodnih) procesa, tipa neke igre (fudbal
(:> menadžeri)...
(:>
(:> Nekada davno, ja i burazer smo planirali tako nešto... :)
Ma šta je problem?
Najpre definišeš sve parametre, koji utiču na izlaznu vrednost nekog
procesa (konkretno rezultat utakNice), i to je poželjno što više takvih para-
metara zbog veće realnosti i manje verovatnoće da ti se nešto "učini poznatim".
Nakon toga sedneš i odrediš odnose (verovatnoće) svakog procesa pojedinačno,
turiš u jednadžbu i eto - Smrt fašizmu, sloboda:rad 1:0!
(:niklaus:)
algoritmi.119dr.grba,
-> #110, peca.st>> ! -> Nije tačno.
>>
>> Ajd mi argumentuj zašto nije tačno.
>> Ja sam argumentovao zašto mislim da je tako,
>> pa bih voleo da čujem i suprotnu argumentaciju.
Tačno je ako pričamo o PGP algoritmu ili CRC... U predmetnom logon.exe
se nije pričalo o takvoj transformaciji, već o predmetnosti i kvalitetu
zaštite tim algoritmom.
Banalna stvar nas dovede u veom žučnu raspravu. Valjda nešto i naučimo
usput...
algoritmi.120kale,
-> #95, snemcev
>> Fora je u tome da prvo treba da provališ da je u pitanju taj algoritam,
>> pa tek onda možeš da konstatuješ za koje lozinke daje iste izlazne
>> brojeve.
Kada se procenjuje kvalitet nekog metoda šifrovanja, UVEK se
pretpostavlja da razbijač razbija baš taj sistem. Zašto? Zato što se
procenjuje kvalitet metoda šifrovanja, a ne razbijača, te se pretpostavlja
da će sistem da napadne (i) najbolji. Pod tom pretpostavkom se procenjuje
najveće potrebno računarsko vreme da se šifra razbije. Argumenata tipa "niko
ovoga neće da se seti" nema u ozbiljnim analizama. Pretpostavlja se da
razbijač napada baš dati metod šifrovanja čiji se kvalitet procenjuje.
algoritmi.121kale,
-> #96, snemcev
>> Ne, nemoram. Ni uz jedan paket nisi dobio papirić na kome piše "Ulazna
>> lozinka kao rezultat transformacije daje broj 908213-3126".
Naprotiv, u vrlo ozbiljnim paketima kao što su operativni sistemi
velikih računara dobiješ knjižurine u kojima piše i gde su rezultati
transformacije. Ni jedan komercijalni program/paket ne može računati na
tajnost mesta gde se ovi rezultati čuvaju; jednostavno, promeniš lozinku i
negde se neki fajl promeni. Vidiš koji i gotovo je sa tajnošću mesta gde se
to čuva.
algoritmi.122kale,
-> #100, dr.grba
>> Ne vidim moguću štetu, osim one da se ova zaštita ugradi na neprikladnom
>> mestu. Kakav algoritam ti predlažeš? 'Ajde da ga vidimo.
A vidiš li moguću štetu na sistemu bez ikakve zaštite osim ako nije na
neprikladnom mestu? ;>>>
Najbolje što mi trenutno pada na pamet je CRC koga bih po izračunavanju
pregazio (XOR) originalnim password-om. Ovaj XOR zato što su CRC polinomi
pravljeni u druge svrhe (za utvrđivanje greške u podacima) i bojim se (ne
tvrdim) da se za broj koji bi bio čisti CRC jedan od odgovarajućih passworda
može brzo generisati. Posle XOR na sistemu ne bi bilo ni originalnog
password-a ni iz njega dobijenog CRC-a. To mi izgleda pouzdano.
Pozdrav!
algoritmi.123kale,
-> #101, dr.grba
>> Moj (nije moj, ali 'aj'cad) logon.exe radi onako kako bi trebalo da
>> radi program za lozinku. Da je na nekoj komunikacionoj vezi, posle trećeg
>> promašaja korisnik bi bio izbačen sa veze.
Izvinjavam se autoru i tebi zbog greške, nije bilo namerno.
Mi ovde ispitujemo algoritam koji treba da onemogući/oteža generisanje
lozinke na osnovu rezultata njenog kodiranja. Rasprava o ostalim metodima
i merama zaštite (sakrivanje algoritma, onemogućavanje logovanja posle par
neuspešnih pokušaja,...) svakako ima smisla, ali je veoma široka tema.
>> >> Naravno, zadaj i neki broj za koji treba naći password koji će da prođe.
>> Ove muzičke želje mi nisu jasne. Radi se o tvojoj nameri da razbiješ
>> program tako da nađeš šifru koja je ugrađena u source programa. Dobio
>> si tačno onaj program koji stoji na mom disku.
Reč je o programu koji treba da generiše broj na osnovu password-a.
Potom se tako dobijeni broj testira sa zapamćenim brojem za odgovarajućeg
korisnika. Da bi to bilo moguće, neophodno je da se na sistemu za svakog
korisnika (i njegovu lozinku) čuva odgovarajući broj. Brojevi dobijeni
funkcijom transformacije postoje na sistemu. Moja "muzička želja" je
sasvim normalan zahtev. logon.exe ne daje broj na izlazu i neupotrebljiv
je za sisteme koji imaju više od jednog korisnika.
algoritmi.124kale,
-> #102, dr.grba
>> >> Broj lozinki je 62^8 što je preko 2 E 14.
>> 'Ajde da uzmemo 64 umesto 62:
>> 64**8 = (2**6)**8, a to je 2**48, a ne 2**14, pošto ovo nije
>> (2**6) * (2**8), što bi stvarno bilo 2**14
>> Gadan previd, a?
Stvarno si me neprijatno iznenadio. Notacija "mantisa e eksponent" je
uobičajena za "floating point" brojeve (BASIC, Pascal, FORTRAN, C,...).
Operator stepenovanja ("^" ili "**") uopšte ne postoji u standardima Pascala
i C-a. Bilo kako bilo, podrazumevao sam da svi koji čitaju moju poruku znaju
da protumače ono što piše, pa ovo je konferencija PC.PROG, zar ne? Videvši da
ti ne znaš, pretpostavio sam da si ili vrlo mlad ili da koristiš računar za
obradu teksta, grafike ili nešto drugo što nema veze sa programiranjem.
Glavno iznenađenje dolazi kad sam ti pogledao resume. Inženjer informatike,
pa još radi na EI-Bull mastodontu kao "sysop"! Zaista me zanima (nije mi
želja da te uvredim) u kojoj školi si postao inženjer informatike? Koje
programske jezike ste tamo učili? Ja ne znam Clipper, ali mi se čini da
ima "floating point" brojeve. Kako se pišu? Je li moguće da se u nekom
programskom jeziku piše 2*10**14 i da ne sme pisati 2e14 (eventualno 2.0e14)?
>> Izvini na izlišnimzagradama, ovako je preglednije, kao i ** umesto ž
Ja sam tolerantan prema formi, ne smeta mi ni višak zagrada ni manjak
blankova.
>> P.S. 2**48 je.... koliko ono beše?... A, da, 2.81474977*(10**14)
>> žas posla za razbiti (:
Nije tačno! 2**48=281474976710656
Specijalno za tebe: 62**8=218340105584896
Za ostale ću i dalje da pišem 62^8 je preko 2 E 14, da ne mučim ljude
brojanjem cifara.
Toliki broj password-a je skoro nemoguće isprobati. Srećom po razbijače
ti si preporučio funkciju koja ovaj broj degradira na manje od 3000.
algoritmi.125kale,
-> #104, dr.grba
>> Skidam kapu i priznajem poraz. Razbi čovek program k'o Panta pitu.
>> P.S. A valjanost programa branim i dalje, shodno potrebi. I
>> shvatite već jednom šta sam hteo time da kažem.
:)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Shvatio sam, konačno! Pa ti se zapravo šališ!
>> Koliko bi razbijač radio da je lozinka zbilja bila duga 20 karaktera?
1*a(1)+2*a(2)+3*a(3)+...+20*a(20)=x(20)
Minimalni zbir za prvih k ASCII kodova je m(k)=k*(k+1)/2*MINASCII,
maksimalni zbir za prvih k ASCII kodova je M(k)=k*(k+1)/2*MAXASCII, gde su:
a(i) ASCII kodovi prvog, drugog,..., dvadesetog znaka lozinke,
x(i) broj dobijen transformacijom prvih i znakova lozinke,
MINASCII najmanji ASCII kod dozvoljen u lozinci,
MAXASCII najveći ASCII kod dozvoljen u lozinci.
Biranje počneš od ASCII koda uz najveći koeficijent (ovde 20, znači a(20) ).
Moraš izabrati takav znak a(20), odnosno u opštem slučaju a(i) da važi
sledeća nejednakost:
( x(i) - m(i-1) ) / i <= a(i) <= ( x(i) - M(i) ) / i, važi za i=2, 3, 4, ...
i na kraju
a(1)=x(1)
Jedan od načina izbora je da izabereš minimalnu dozvoljenu vrednost iz
skupa vrednosti znaka. Ako kasnije ispadne da bi neki a(j) gde je j<i
morao da uzme nedozvoljenu vrednost da bi jednačina bila zadovoljena, onda
povećavaš a(j+1) na najbližu veću dozvoljenu vrednost dok ne dobiješ priliku
da za a(j) izabereš dozvoljenu vrednost. Eventualno bi ovde bila potrebna i
rekurzija (promena a(j+2), a(j+3),...) što zavisi od izbora dozvoljenih
vrednosti za znake lozinke.
Za lozinku od 20 slova ti treba _otprilike_ 5 puta više vremena za
razbijanje nego za lozinku od 4 slova.
algoritmi.126kale,
-> #105, dr.grba
>> Valjda imam poznanike matematičare od kojih bih tražio da mi naprave
>> valjan matematički model.
Baš si drug! Tvoje znanje je dobro za druge, a kad bi tebi trebalo
ti bi pitao nekog ko zna.
algoritmi.127zolika,
-> #93, kale
>> žovek nije pitao da li i gde da sakrije lozinke i algoritam, nego je
>> tražio funkciju.
Sve mi se čini, Kale, da si ti jedan od retkih koji me razumeju, al', eto,
ne dâ mi se da dođem do preko mi potrebne funkcije... :-)))))
algoritmi.128zolika,
-> #85, niklaus
>> Stvar je sledeća... Ljudi od kojih će se, u jednom trenutku njihovog
>> srećnog programerskog života, tražiti da naprave algoritam za sigurno
>> čuvanje šifara, bi trebalo da su dovoljno inteligentni da pronađu
>> dovoljno siguran algoritam, ili da su jednostavno u stanju da od
>> ponuđenih algoritama, nađu onaj sa najmanjom verovatnoćom za "provalu".
E, moj Virte :-))) Pa ono što radim je UPRAVO pokušaj da od ponuđenih
algoritama izaberem neki koji mi odgovara... Problem je samo što ponuda i
nije nešto naročito (molim dr.Grbu da se ne ljuti, zaista sam zahvalan na
predlogu rešenja problema).
algoritmi.129niklaus,
-> #127, zolika(:> ne dâ mi se da dođem do preko mi potrebne funkcije... :-)))))
Koliko se ja sećam, pošto (na žalost) ne nalazim na HDu dotični
program, a sećam se da je postojala zbirka korisnih programčića za C zvana
C Snippets. Beće na FFSu. Evo baš ću da zovem da uzmem ponovo (i da ti
uštedim trud)...
(:niklaus:)
algoritmi.131janko,
-> #122, kale> pravljeni u druge svrhe (za utvrđivanje greške u podacima)
> i bojim se (ne tvrdim) da se za broj koji bi bio čisti CRC
> jedan od odgovarajućih passworda može brzo generisati.
Dobro razmišljaš. Stvarno je lako generisati "unazad" nešto što
će dati isti CRC.
> Posle XOR na sistemu ne bi bilo ni
> originalnog password-a ni iz njega dobijenog CRC-a. To mi
> izgleda pouzdano.
Po meni, vrlo je nepouzdano.
Ali, opet, čini mi se da umeš da razmišljaš i da si na pravom
putu... ;>
algoritmi.130janko,
-> #111, peca.st> "egzotične" znake. Recimo CRC algoritam daje iste
> rezultate najčešće za neke totalno "leve" znake (nešto
> nalik na đubre) koji nemaju veze sa onim pravim (osim što
> daje isti otisak :), a opet najčešće takvi "levi" znaci
> uopšte nisu dozvoljeni u šifri, pa bi se uslovno moglo
> reći da je CRC algoritam "jednoznačan" a (naravno) ne
==
> postoji inverzan algoritam. Hoću da kažem da ćeš teško
================
> naći dva stringa sastavljena od (recimo) samo malih slova
> i tačke koji posle CRCa daju isti otisak.
Koliko se ja razumem, postoji i trivijalan je, čak. Oni koji
znaju teoriju koja leži iza CRC, znaju i zašto.
algoritmi.132kale,
-> #113, zolika
Ovo nije bio reply na moju poruku.
algoritmi.133peca.st,
-> #119, dr.grba!-> Tačno je ako pričamo o PGP algoritmu ili CRC...
Tačno je ako pričamo o onome što je zolika hteo!
Ako ne pričamo o tome - čemu sve ovo? Njemu tako nećemo pomoći,
a samo će utrošiti vreme i prostor na Sezamovom disku. ;)
!-> Banalna stvar nas dovede u veom žučnu
!-> raspravu. Valjda nešto i naučimo usput...
Najvažnije je da zolika dobije algoritam koji mu treba...
Peđa.
algoritmi.134niklaus,
-> #128, zolika(:> E, moj Virte :-))) ......
E, sad ste me stvarno naljutili! (;
Evo programčića za proračun 16-bitnog CRCa...
(Šaljem ga na Pascalu, jer je najsličniji Moduli-2, kojim se zolika služi
za diplomski. Šta ćete - zaboravih jezik, koji sam sâm osmislio)
const POLY=$8408;
var
sifra : string;
function crc16( data_p:string; length:word ): word;
var
i, j : byte;
data, crc : word;
dummy : word;
begin
CRC := $ffff;
if ( length=0 ) then
begin
crc16 := CRC;
exit;
end;
j := 0;
repeat
dummy := $ff and ord(data_pŠjĆ);
inc( j );
for i:=0 to 7 do
begin
data := $ff and ord( data_pŠjĆ );
inc( i );
data := data shr 1;
if ( ((CRC and $0001) xor (data and $0001)) <> 0 ) then
CRC := (CRC shr 1) xor POLY
else CRC := CRC shr 1;
end;
dec( length );
until (length=0);
CRC := not( CRC );
data := CRC;
CRC := (CRC shl 8) or ((data shl 8) and $ff);
crc16 := CRC;
end;
begin
repeat
write('Unesi sifru->');
readln( sifra );
writeln('------------>',crc16( sifra, length(sifra) ));
until (sifra='');
end.
Ne znam šta će zoliki mentoL na sve ovo da kaže, ali stvar radi...
TOLIKO OD MENE!
(:niklaus:)
ps Nadam se da niko neće tražiti CRC-32... (:
algoritmi.135snemcev,
-> #109, peca.st>> Ako ne mogu da dođem do rezultata transformacije, onda transformacija
>> nema efekta, čak ima kontra efekat!
Molim te, navedi mi jedan komercijalni paket koji kaže "rezultat
transformacije ulazne lozinke je to_i_to". U slučaju da konkretan primer
nemaš, diskusiju po ovom pitanju smatram završenom.
algoritmi.136snemcev,
-> #113, zolika>> Ako neko zna algoritam, a neće da mi kaže - u redu, ne mogu ga puškom
>> naterati.
Da li bi ti pomogao crc32.asm?
algoritmi.137kale,
-> #131, janko
>> > Posle XOR na sistemu ne bi bilo ni
>> > originalnog password-a ni iz njega dobijenog CRC-a. To mi
>> > izgleda pouzdano.
>> Po meni, vrlo je nepouzdano.
Složiću se da mi je ideja sa XOR naivna. Pošto je CRC n-torka dobijena
pomoću XOR određenih grupa bita originala, još jedan XOR sa originalom ne daje
nešto kvalitetno novo, to ostaje n-torka XOR na određenim grupama bita.
algoritmi.138janko,
-> #137, kale>>> > Posle XOR na sistemu ne bi bilo ni
>>> > originalnog password-a ni iz njega dobijenog CRC-a.
>>> > To mi izgleda pouzdano.
>
>>> Po meni, vrlo je nepouzdano.
>
> Složiću se da mi je ideja sa XOR naivna. Pošto je CRC
> n-torka dobijena pomoću XOR određenih grupa bita
> originala, još jedan XOR sa originalom ne daje nešto
> kvalitetno novo, to ostaje n-torka XOR na određenim
> grupama bita.
Tačno. Ono što još nismo objasnili drugima je -- zašto je tako
lako napraviti unazad nešto što daje isti CRC. Pominjao sam,
treba znati malo matematike koja leži iza svega. ;)
Posmatrajmo jednačinu A / B = C sa ostatkom D. Ako nam neko da
B i D, potpuno je trivijalno naći neko A za koje važi gornja
jednakost, za C koje možemo da biramo sami. B je, u ovom
slučaju, tzv. generišući polinom, D je onaj broj koji se obično
zove CRC, a A je poruka, u ovom slučaju šifra. Varijacija koju
si ti predložio se opet svodi na A / B = C sa ostatkom D, gde
znamo brojeve B i A + D.
Toliko, među nama, apsolventima elektrotehnike, smer računarska
tehnika. ;)
algoritmi.139peca.st,
-> #135, snemcev!-> Molim te, navedi mi jedan komercijalni
!-> paket koji kaže "rezultat transformacije
!-> ulazne lozinke je to_i_to". U slučaju da
!-> konkretan primer nemaš, diskusiju po ovom
!-> pitanju smatram završenom.
Ko ovde govori o "komercijalnim paketima i njihovim ulaznim šiframa" ?
Ovde govorimo o BBS softveru! A ti to nisi shvatio, nego si krenuo
u pogrešnom pravcu. No, sve i da govorimo o komercijalnom paketu,
on negde mora sačuvati "rezultat transformacije ulazne lozinke"
pa ga je moguće i naći, ako ga on već sam ne nudi. Ako ga nije moguće naći
(što je apsurdno) onda transformacija ima pomenuti kontra efekat.
Dalje, kod tih komercijalnih paketa, onaj ko zna algoritam i rezultat
transformacije dobijen korišćenjem tog algoritma teško će uspeti da otkrije
neku šifru koja daje isti rezultat, dok će, ako je korišćeni algoritam
ovaj tvoj, (kao što si i sam rekao) vrlo lako uspeti da pronađe šifru koja
"pasuje".
"Diskusiju po ovom pitanju smatram završenom."
Peđa.
algoritmi.140peca.st,
-> #134, niklausTeorema 1:
----------
(1 and 0) = 0; (1 and 1) = 1; $FF = 1111 1111;
=> ($FF and $xy) = $xy
Kraj teoreme.
!-> dummy := $ff and ord(data_pŠjĆ);
!-> data := $ff and ord( data_pŠjĆ );
Koja je svrha ovih redova osim da uspore malo čitav algoritam?
Osim toga, čemu služi dummy, kad se nigde drugo ne pominje?
!-> for i:=0 to 7 do
!-> inc( i );
!-> end;
Promena vrednosti brojača for ciklusa unutar ciklusa?
Zar se to koristi u jednom algoritmu koji pretenduje da bude
koristan i ozbiljan? Plus što ovo Inc (i) nije ni pod kakvim uslovom,
pa je ladno moglo for i := 0 to 3
!-> CRC := (CRC shl 8) or ((data shl 8) and $ff);
Posle ovakvog reda, prvih 8 bitova će sigurno biti 0!
(broj kad se šiftuje levo za osam mesta pripisaće mu se sa desna
osam nula. kad dva takva broja ORuješ, dobićeš opet broj za osam nula)
Znači, rezultat će praktično biti osmobitni.
Ako si već pokušavao da smisliš algoritam kojim ćeš nas zavarati
i navesti da poverujemo da je CRC, mogao si da smisliš nešto barem
malo pametnije od ovoga. Ovo što sam komentarisao su, moram tako da se
izrazim, glupe stvari koje bodu oči, svako će to primetiti. Ovo su samo
najočiglednije greške, ostale nisam ni pokušavao da pronađem iako
ih sigurno ima. Glavna zagonetka mi je šta si hteo da postigneš ovom
porukom?
!-> Ne znam šta će zoliki mentoL na sve ovo
!-> da kaže, ali stvar radi...
Kad bi ovo video zolikin mentor, verovatno bi ga odmah oborio.
Stvar radi - tu se apsolutno slažemo - jer ni jedna greška pri
kompajliranju nije prijavljena! Program je stvarno HAOS.
!-> TOLIKO OD MENE!
Puno ti se zahvaljujem u zolikino i moje ime, kao i u ime svih generacija
koje će videti ovu glupost.
!-> ps Nadam se da niko neće tražiti CRC-32... (:
Pretpostavljam da se sastoji od toga da tamo gde sad piše word
treba da piše longint, jel tako? No, ja ne umem da promenim program
tako, pa bih te molio da to ti učiniš.
Peđa.
P.S. Ovo bi trebalo da je konferencija sa najmanje šuma.
algoritmi.141ganta,
Evo dva programa koje mi je poslao drug iz CA.
Prevedite ih posebno i nazovite prvog 'pera', a drugog
'mika', ili kako god hocete.
Pera sifrira, tako sto cita standard input i pise standard
output, a ima samo jedan argument - broj od 1 do
2000000000. Taj broj je sifra. Mika desifrira, sa istim brojem.
Na primer, imate file x.txt koga treba sifrirati:
pera 33456 < x.txt > x1.txt
x1.txt je sifrirani file.
Da ga procitate, uradite
mika 33456 < x1.txt > x2.txt
x2.txt treba da bude isti kao x.txt.
ili da odmah dobijete na ekranu,
mika 33456 < x1.txt
Algoritam je trivijalan, ali za probijanje sifre treba par sati
rada vrlo brzih masina.
Napomena: mozda je potrebno par izmena za razne verzije C-ja.
=========== pera.c start =============
#include <stdio.h>
int tot;
long rseed;
/* svahilli translator A */
main(argc, argv)
int argc;
char *argvŠĆ;
š
int c;
tot = 126 - ' ' + 3;
sscanf(argvŠ1Ć, "%ld", &rseed);
while((c = getchar()) != EOF) š
c = cmprs(c);
c = radd(c, rnum());
c = expnd(c);
putchar(c);
ć
ć
radd(a, b)
int a,b;
š
int s;
s = a + b;
if (s > tot) s = s - tot - 1;
return(s);
ć
cmprs(c)
int c;
š
if(c == 'Đr') c = 0;
else if (c == 'Đn') c = 1;
else if (c == 'Đt') c = 2;
else if (c < ' ') c = 3;
else if (c > 126) c = 3;
else c = c - ' ' + 3;
return(c);
ć
expnd(c)
int c;
š
if(c == 0) c = 'Đr';
else if (c == 1) c = 'Đn';
else if (c == 2) c = 'Đt';
else if (c == 3) c = ' ';
else c = c + ' ' - 3;
return(c);
ć
rnum()
š
int ir;
rseed = rseed * 1103515245L + 12345L;
ir = (rseed >> 16) & 0x7f;
if(ir >= tot) ir = 7;
return(ir);
ć
=========== pera.c end =============
=========== mika.c start =============
#include <stdio.h>
int tot;
long rseed;
/* svahilli translator B */
main(argc, argv)
int argc;
char *argvŠĆ;
š
int c;
tot = 126 - ' ' + 3;
sscanf(argvŠ1Ć, "%ld", &rseed);
while((c = getchar()) != EOF) š
c = cmprs(c);
c = rsub(c, rnum());
c = expnd(c);
putchar(c);
ć
ć
rsub(a, b)
int a,b;
š
int s;
s = a - b;
if (s < 0) s = s + tot + 1;
return(s);
ć
cmprs(c)
int c;
š
if(c == 'Đr') c = 0;
else if (c == 'Đn') c = 1;
else if (c == 'Đt') c = 2;
else if (c < ' ') c = 3;
else if (c > 126) c = 3;
else c = c - ' ' + 3;
return(c);
ć
expnd(c)
int c;
š
if(c == 0) c = 'Đr';
else if (c == 1) c = 'Đn';
else if (c == 2) c = 'Đt';
else if (c == 3) c = ' ';
else c = c + ' ' - 3;
return(c);
ć
rnum()
š
int ir;
rseed = rseed * 1103515245L + 12345L;
ir = (rseed >> 16) & 0x7f;
if(ir >= tot) ir = 7;
return(ir);
ć
=========== mika.c end =============
algoritmi.142ndragan,
-> #61, salex/ KAMATA = DUG * ( EXP( LN( 1 + STOPA ) / 30 ) ž DANI - 1 )
Jel ti ovo misliš da ugradiš negde u program? Za koji onda stepenuješ sa
_dani_ kad znaš da će to da se svede na exp(ln(_nešto_)*dani), pa ćeš
imati dvaput logaritam i eksponencijalnu, dušu dalo da duže radi i bolje
greši. Predlažem
KAMATA = DUG * ( EXP( LN( 1 + STOPA ) * DANI / 30 ) - 1 )
a pošto mnoge ljude, sa knjigovođama i bankarima na čelu kolone, boli
između ušiju kad ugledaju decimalni zarez, stopa će ti verovatno biti
pomnožena sa 100, tj izražena u procentima, pa zato
KAMATA = DUG * ( EXP( LN( 1 + STOPA / 100 ) * DANI / 30 ) - 1 )
...i to je jedina primenjiva formula, pošto je ona prva izbačena iz
upotrebe još 1987 - još tada ju je inflacija pregazila.
Drugi je zez što se baš i ne zna šta je u kom trenutku _dug_. Pajz'
primer:
1. dobio si platu 01.11
2. spizdio si sve 03.11, u minusu si
3. kupio si marke 04.11, probio si bonus
4. drugi deo plate 08.11, malo si u minusu
5. topli obrok 11.11, malo si u plusu
6. platio si pretplatu na struju 21.11, probio si bonus
7. ostatak plate 24.11, u plusu do kraja
Sad počinje seks. Slučaj jedan je jasan, imaš ono bede od pozitivne
kamate. Već slučaj dva nije jasan: da li si u minusu za sve što si
probio, ili ti se pripisala kamata od 1. pa si možda u plusu?
3. počinje ti kaznena kamata. šta je osnovica? samo čist dug, deo čistog
duga koji probija bonus, sa ili bez prethodno obračunate kamate na
minus?
...
7. ti misliš da si u plusu, ali nemaš pojma na koju kamatu se odakle
dokle i sa kojom osnovicom računala kamata na kamatu. Idućeg meseca
dobijaš izvod, i primećuješ da su brojke smešne, te zaboravljaš na sve.
algoritmi.143snemcev,
-> #142, ndragan>> KAMATA = DUG * ( EXP( LN( 1 + STOPA ) * DANI / 30 ) - 1 )
Mala ispravka - umesto 30 treba da stoji broj dana u mesecu za koji se
obračunava kamata. Inače Jugobanka obračunava kamatu tako da ako si od
petog do desetog u minusu, jedanaestog ti knjiži na računu kamatu po
gornjoj formuli. Izuzetak je poslednji dan u mesecu kada se bez obzira
na to da li si još u minusu ili si izmirio dugovanje kamata knjiži.
algoritmi.144dr.grba,
-> #116, niklaus>> ideji (konkretno u dr.grbinoj formuli za izradu CRCa). Zato smo ga
Šta pričaš, čoveče? Kakva moja formula za izradu CRCa? (((:
E, 'ajde da završimo sa ovim. Nikakvo krajnje rešenje nisam nudio,
i stvarno nije u redu da se više pozivate na moje ime kao na primer
lošeg algoritma. Po stoti put ponavljam da je taj algoritam primeren na
mestu i u okruženju na kome se koristi, i stvarno nema potrebe da
se dalje napucavamo.
algoritmi.145dr.grba,
-> #124, kale>> Stvarno si me neprijatno iznenadio. Notacija "mantisa e eksponent"
>> je uobičajena za "floating point" brojeve (BASIC, Pascal, FORTRAN,
>> C,...). Operator stepenovanja ("ž" ili "**") uopšte ne postoji u
>> standardima Pascala i C-a. Bilo kako bilo, podrazumevao sam da svi
>> koji čitaju moju poruku znaju da protumače ono što piše, pa ovo je
>> konferencija PC.PROG, zar ne? Videvši da
Priznajem grešku i obećavam da te više neću provocirati.
Iako, sad se malo služiš krivinama. Moj previd, grešku, neznanje, kako
god hoćeš, sad koristiš da nadmoćno predstaviš svoju veštinu izlaganja
kroz nomenklature programskih jezika. Slažem se da to leži u jednoj
programerskoj konferenciji, ali se ne slažem sa načinom na koji pokušavaš
da me učiniš mizernijim nego što jesam. A sve je počelo od malo dobre
volje....
>> Glavno iznenađenje dolazi kad sam ti pogledao resume. Inženjer
>> informatike, pa još radi na EI-Bull mastodontu kao "sysop"!
Na EI-Bull mastodontu sam sysop, a ne "sysop", hteo ja to ili ne. Znam
dosta o toj mašini, iako sam jednog trenutka shvatio da u neke stvari
ne vredi ulagati koru velikog mozga i prestao da se nešto trudim. Moji
afiniteti su, eto, na drugoj strani, iako o svemu tome ovde nije reč.
>> Zaista me zanima (nije mi želja da te uvredim) u kojoj školi si postao
>> inženjer informatike? Koje programske jezike ste tamo učili?
Inženjer informatike sam postao na Višoj Školi za ekonomiju i informatiku,
današnjoj Višoj poslovnoj, kao treći u generaciji, sa prosekom 8,61. Prosek
uže stručnih predmeta mi je 9,5. Učili smo neke stvari koje su u suštini
valjane, iako je njihova implementacija prezentovana na predavanjima
odavno zastarela. Iako mislim da se ta škola može završiti a da se ne nauči
baš ništa, verujem da sam uspeo da pokupim tamo neka znanja koja mi dobro
dođu u poslu kojim se bavim. I zbog toga mislim da nije baš sasvim u redu
da nipodaštavaš moje zvanje. Ja ne znam šta si ti po struci, niti kakve
su ti reference. To mi zbilja nije ni bitno, to za mene nije princip
vrednovanja neke osobe. Jedino primećujem da se trsiš svojim znanjem,
iako ne baš konstruktivno.
>> Ja sam tolerantan prema formi, ne smeta mi ni višak zagrada ni
>> manjak blankova.
E, jebi ga, sad treba da branim i činjenicu da radim na kanti sa lošom
tastaturom!... ):
P.S. Jako mi je žao što sam se strahovito zarozao u tvojim očima, mada,
kad bolje razmislim, i to me zabole. Nadam se da ti više neću stajati na
žulj. Svakako, iako sam galamdžija, daću sve od sebe da ispunim ovo obećanje.
algoritmi.146dr.grba,
-> #128, zolika>> algoritama izaberem neki koji mi odgovara... Problem je samo što
>> ponuda i nije nešto naročito (molim dr.Grbu da se ne ljuti, zaista
>> sam zahvalan na predlogu rešenja problema).
Naravno da se ne ljutim na tebe. Ljutim se na one koji smatraju da
sam ponuđeni algoritam, koji je zbilja krajnje jednostavan i banalan,
predstavio kao konačno rešenje kriptografije u računarstvu dvadesetog
veka. I koji su sve ovo zamešateljstvo iskoristili da pokažu svoju
nadmoć i perfektnu erudiciju u ophođenju sa drugima.
Nadam se, Zoli, da ćeš uspeti da pronađeš prikladan algoritam za svoj
projekat. čao mi je što nisam na vreme povezao tvoje ranije poruke,
svakako onu banalnost ne bih predložio za takvu potrebu.
algoritmi.147debelijencija,
-> #118, niklaus!=?> Najpre definišeš sve parametre, koji utiču na izlaznu
!=?> vrednost nekog procesa (konkretno rezultat utakNice), i to
!=?> je poželjno što više takvih para- metara zbog veće realnosti
!=?> i manje verovatnoće da ti se nešto "učini poznatim". Nakon
!=?> toga sedneš i odrediš odnose (verovatnoće) svakog procesa
!=?> pojedinačno, turiš u jednadžbu i eto - Smrt fašizmu,
!=?> sloboda:rad 1:0!
U redu je to, nego problem je ako hoćeš da gledaš utakmicu! Tj. ono
u Football Manageru 2, kada se utakmica stvarno igra, a ne prikazuju
se 5-6 predefinisanih akcija sa 2 moguća kraja (slično radi i The Manager
na PC-ju, ništa nije napredovao :). Mada i tu možeš tako, udri, kolika je
verovatnoća da preševa onog ispred sebe, ali izgleda malo glomazno... :)
U svakom slučaju, nemoj da se mučiš preterano :), to mi ionako nije na listi
prioriteta, jer ako ne završim PAUS2 skoro, ima da me umlate ovi omladinci sa
SEZAM-a... :)
algoritmi.148janko,
-> #141, ganta> Evo dva programa koje mi je poslao drug iz CA.
> Prevedite ih posebno i nazovite prvog 'pera', a drugog
> 'mika', ili kako god hocete.
> Pera sifrira, tako sto cita standard input i pise standard
> output, a ima samo jedan argument - broj od 1 do
> 2000000000. Taj broj je sifra. Mika desifrira, sa istim
> brojem.
Vrlo kilavo -- isti algoritam se vrlo lako prepravlja da se za
šifru koriste slova, reči ili čak, rečenice.
> Algoritam je trivijalan, ali za probijanje sifre treba par
> sati rada vrlo brzih masina.
Kako se probija, objavljeno je (ako se sećam) u poslednjim
Računarima. Za tekst koji je Dejan šifrovao, PC je radio par
desetina minuta, opet, ako se dobro sećam brojeva.
algoritmi.149janko,
-> #142, ndragan> _dani_ kad znaš da će to da se svede na
> exp(ln(_nešto_)*dani), pa ćeš imati dvaput logaritam i
> eksponencijalnu, dušu dalo da duže radi i bolje greši.
> Predlažem
>
> KAMATA = DUG * ( EXP( LN( 1 + STOPA ) * DANI / 30 ) - 1 )
>
> a pošto mnoge ljude, sa knjigovođama i bankarima na čelu
> kolone, boli između ušiju kad ugledaju decimalni zarez,
> stopa će ti verovatno biti pomnožena sa 100, tj izražena u
> procentima, pa zato
>
> KAMATA = DUG * ( EXP( LN( 1 + STOPA / 100 ) * DANI / 30 )
> - 1 )
Ako već potežemo numeričku tačnost, improvizovanje stepenovanja
pomoću EXP / LN para daje daleko slabije rezultate od
korišćenja prave funkcije za stepenovanje, ako je ona dobro
realizovana.
algoritmi.150nikac,
Evo ga dobar 32-bitni CRC (nesto sporiji, ali bez konsultacionih tabela)
Cini mi se da ga je napisao ZZ, uz primer racunaja crc-a nekog fajla:
#include <stdio.h>
/* ------ 32-bitni CRC pocetak procedure ------ */
unsigned long updcrc (int c, unsigned long crc)
š
_asm š
xor dx,dx
mov ax,c
xor al,byte ptr crc
make:
shr dx,1
ror ax,1
jae decc
xor dx,0xedb8
xor ax,0x8320
decc:
loop make
mov bx,word ptr crc+2
mov cx,word ptr crc
mov cl,ch
mov ch,bl
mov bl,bh
xor bh,bh
xor dx,bx
xor ax,cx
ć
ć
/* ------ 32-bitni CRC kraj procedure --------- */
/* ------ Primer izracunavanja CRC nekog fajla ------ */
unsigned long crc_file(char *fname)
š
FILE *f;
unsigned long crc;
int c;
crc = 0xffffffffl; /* ima 8 f-ova, tj treba da ima :) */
if ( ( f=fopen(fname,"rb") ) == NULL )
return crc;
while ( ( c=fgetc(f) ) != EOF )
crc = updcrc(c,crc);
fclose(f);
return crc;
ć
/* ------ Kraj primera ------ */
Eto toliko od mene, nadam se da ce Zoliki i ostalima ovo fino sluziti...
algoritmi.151kale,
-> #145, dr.grba
>> >> ...pa još radi na EI-Bull mastodontu kao "sysop"!
>> Na EI-Bull mastodontu sam sysop, a ne "sysop", hteo ja to ili ne.
Navodnike sam stavio zato što nisam bio siguran šta to znači u BBS
resume-u. U BBS žargonu "sysop" je ono što je na velikim sistemima "system
administrator". Na velikim sistemima postoji i "system operater". Nije mi
bila želja da omalovažim tvoj posao, koji god da je. Nažalost, baš je tako
ispalo. :(((
Pozdrav!
ps Odgovor na ostatak poruke u mail, ne spada u temu. :)
algoritmi.154ndragan,
-> #73, dejanr/ Ja danas gledao ima li u nekom od manuela VMS-a koji se polinom tačno
Pogledaj negde u System Security (VMS 4.2), čini mi se pred kraj druge
ili treće glave, ima oko strana ipo kako se računa CRC. Nemoj me držati
za reč, to je bilo pre pet godina :)
algoritmi.152ndragan,
-> #134, niklaus/ function crc16( data_p:string; length:word ): word;
====
...i onda pomislim "šta je metnuo smajli u sred funkcije"
algoritmi.153ndragan,
-> #67, janko/ Cilj je da predstavnici šifara budu ravnomerno razbacani po
/ prostoru, i da je prostor dovoljno velik, da postane iluzorno
Ono što sam dao je samo na brzaka ideja da se zakomplikuje život
eventualnom razbijaču algoritma; za ozbiljniji posao sledi to što si
rekao. Znam za slučajeve kad je dodatno komplikovanje postupka dalo
šifru koja se lakše razbija od prvobitne.
BTW, CRC nije bilo koji tridesetdvobitni broj. Mislim da je to neki iz
jedne određene klase polinoma u 0-1 algebri, te da ono "cyclic" ima veze
sa imenom klase. Pitanje je koliko u stvari ima CRC brojeva, mislim da
ih svakako ima manje od MaxLongInt.
algoritmi.155djelovic,
-> #153, ndragan> BTW, CRC nije bilo koji tridesetdvobitni broj. Mislim da je to neki iz
> jedne određene klase polinoma u 0-1 algebri, te da ono "cyclic" ima veze
> sa imenom klase. Pitanje je koliko u stvari ima CRC brojeva, mislim da
> ih svakako ima manje od MaxLongInt.
CRC je samo specifični HASH algoritam napravljen za detektovanje grešaka
pri prenosu/čuvanju podataka. Za potrebe transformacije lozinke je potpuno
neupotrebljiv jer se na osnovu njegovog rezultata lako dobija neka reč koja taj
rezultat daje.
Kao i svi dobri HASH algoritmi, i CRC pokriva potpuno i uniformno ceo opseg
brojeva za koji je napravljen.
P.S. Naglasak poruke je na terminologiji. Ono što zoliki treba je hash
algoritam koji je uz to i jednosmeran, a ne specifični CRC.
algoritmi.156dragisha,
-> #135, snemcev-> Molim te, navedi mi jedan komercijalni paket koji kaže "rezultat
-> transformacije ulazne lozinke je to_i_to". U slučaju da konkretan primer
-> nemaš, diskusiju po ovom pitanju smatram završenom.
Komercijalni paket... Zovu ga Unix, tek odnedavno se taj rezultat
transformacije krije, a godinama je bio sasvim pristupačan. Kažeš cat
/etc/passwd i dobiješ rezultate ulaznih transformacija, potrudiš se malo
više i nađeš i sam algoritam. Postoje razni crack-eri koji će metodom
uzaludnih pokušaja da nabodu password, ali nijedan ne može da ga nađe nekom
ziher metodom u obrnutom pravcu.
A diskusija i jeste za završavanje. Dvije (i više:) grupe ljudi govore o
kruškama i jabukama. Brezveze:).
algoritmi.157dragisha,
-> #100, dr.grba-> I dalje mislim da je rešenje dobro NA ODREĐENOM NIVOU....
Na nivou malog Perice, apsolutno!:))
algoritmi.158dr.grba,
-> #157, dragisha>> -> I dalje mislim da je rešenje dobro NA ODREĐENOM NIVOU....
>>
>> Na nivou malog Perice, apsolutno!:))
90% ljudi koji pristupaju računarima su na nižem nivou nego mali Perica.
Amin!
algoritmi.159zolika,
-> #129, niklaus>> C Snippets. Beće na FFSu. Evo baš ću da zovem da uzmem ponovo (i da ti
>> uštedim trud)...
Neizmerno ću ti biti zahvalan...
algoritmi.160skerl,
ASM CRC calculation code
This unit provides three speed-optimized functions to compute (or continue
computation of) a Cyclic Redundency Check (CRC). These routines are
contributed to the public domain.
Each function takes three parameters:
InitCRC - The initial CRC value. This may be the recommended initialization
value if this is the first or only block to be checked, or this may be
a previously computed CRC value if this is a continuation.
InBuf - An untyped parameter specifying the beginning of the memory area
to be checked.
InLen - A word indicating the length of the memory area to be checked. If
InLen is zero, the function returns the value of InitCRC.
The function result is the updated CRC. The input buffer is scanned under
the limitations of the 8086 segmented architecture, so the result will be
in error if InLen > 64k - Offset(InBuf).
}
Interface
Function UpdateCRC16(InitCRC : Word; Var InBuf; InLen : Word) : Word;
{ I believe this is the CRC used by the XModem protocol. The transmitting
end should initialize with zero, UpdateCRC16 for the block, Continue the
UpdateCRC16 for two nulls, and append the result (hi order byte first) to
the transmitted block. The receiver should initialize with zero and
UpdateCRC16 for the received block including the two byte CRC. The
result will be zero (why?) if there were no transmission errors. (I have
not tested this function with an actual XModem implementation, though I
did verify the behavior just described. See TESTCRC.PAS.) }
Function UpdateCRCArc(InitCRC : Word; Var InBuf; InLen : Word) : Word;
{ This function computes the CRC used by SEA's ARC utility. Initialize
with zero. }
Function UpdateCRC32(InitCRC : LongInt; Var InBuf; InLen : Word) : LongInt;
{ This function computes the CRC used by PKZIP and Forsberg's ZModem.
Initialize with high-values ($FFFFFFFF), and finish by inverting all bits
(Not). }
Pozdrav,
Skerl.
algoritmi.161skerl,
Cyclic Redundancy Check
---------------------------------------------------------
This archive includes the following three files:
crc2.c Computes crc by bit shifting
crcfast.c Computes crc by table lookup
crctab.c Computes tables used in crcfast.c
crc.doc This file
The utilities crc2 and crcfast compute the cyclic redundancy checks
for both the crc-16 (used in arc files) and crc-ccitt (used in xmodem).
crcfast is faster than crc2. These routines compute the crc's for a
given file as a means of checking data integrity.
These routines compile without change under Turbo C. All are
short and illustrate the basic principles of crc calculations.
Pozdrav,
Skerl.
crc-c.zipalgoritmi.162niklaus,
-> #147, debelijencija(:> na PC-ju, ništa nije napredovao :). Mada i tu možeš tako, udri,
(:> kolika je verovatnoća da preševa onog ispred sebe, ali izgleda
(:> malo glomazno... :)
Ma znaš kako. U principu bi mogao da kretanje svakog igrača u napadu
da definišeš kretanje ukoso cik-cak (znaš kako izgleda šematski prikaz binarnog
drveta? E tako!). Možeš za svakog igrača da podesiš verovatnoću skretanja na
levo i na desno, mada je to već perverzija. Ako pak uradiš tako, prilično
realno možeš da prikažeš krilne igrače, centarfore...
Sličnu, ali malo komplikovaniju logiku primenjuješ na odbranbenog
igrača. Njemu možeš da uvedeš 4 smera (NW, NE, SW, SE, you know what I mean?).
Da se igrač u napadu i odgovarajući igrač iz odbrane (ovo "odgova-
rajući" možeš da izvučeš i postavki napada: 4-2-4, 5-3-2, ili kako već to ide),
ne bi baš žestoko mimoišli, valja definisati ili trenutak kada se igrač iz
odbrane "posvećuje" "svom" igraču, ili da jednostavno kretanje odbranbenog
igrača ne bude _baš_ slučajno.
Otprilike je to - to. Logika je prilično jednostavna, i poboljšanja
su poželjna...
(:niklaus:)
algoritmi.163niklaus,
-> #144, dr.grba(:> Šta pričaš, čoveče? Kakva moja formula za izradu CRCa? (((:
Ne uzbuđuj se! (:
Zar nisi primetio da je moj stav sve vreme bio srodan tvome, odn.
složili smo se da nisi napravio kakvo remek-delo, već si samo ponukao ljude
da stvaraju _pravu_ formulu za CRC...
(:niklaus:)
algoritmi.164niklaus,
-> #140, peca.st(:> (Moja opaska #1:
(:> dummy : word; !!
(:> dummy := $ff and ord(data_pŠjĆ); !!
(:> => ($FF and $xy) = $xy
(:> Kraj teoreme.
Hvala za rupu na saxsiji, ali nisi video da je dummy tipa word, što
će reći da se preslikavaju samo "donjih" 8 bitova promenljive dummy...
(:> (Moja opaska #2: data, crc : word;)
(:> !-> CRC := (CRC shl 8) or ((data shl 8) and $ff);
(:>
(:> Posle ovakvog reda, prvih 8 bitova će sigurno biti 0!
Preporučujem ti da ponovo prelistaš žabarkapu... i data i CRC su opet
word-ovi...
(:> Ako si već pokušavao da smisliš algoritam kojim ćeš nas zavarati
(:> i navesti da poverujemo da je CRC, mogao si da smisliš nešto barem
(:> malo pametnije od ovoga. Ovo što sam komentarisao su, moram tako
(:> da se
Prijatelju, u redu si...
(:> #$*&%!šđ+>/č
NO COMMENT!
Kao što si već video originalni izvorni kod (u Cu) sam ti poslao na
mail. Budi toliko dobar pa ga ti prevedi zoliki...
(Komentar za ostale) Programčić koji sam sveo na Pascal nije baš
_identičan_ "onom" u Cu, ali za kodiranje šifara je dobar (u prevodu: nema
dečije bolesti, tipa malko promenite ulazni string, pa se isto toliko malo
menja i izlazna vrednost CRCa).
Inače, dotični program u C-u je tzv:
16 12 5
CCITT CRC 16 polinom : X + X + X + 1.
(:niklaus:)
algoritmi.165prvul,
-> #155, djelovicŮCRC je samo specifični HASH algoritam napravljen za detektovanje grešaka
Ůpri prenosu/čuvanju podataka. Za potrebe transformacije lozinke je potpuno
Ůneupotrebljiv jer se na osnovu njegovog rezultata lako dobija neka reč
Ů▄▄
Da ne bude zabune, CRC ukratko radi ovako: svaki niz od N bitova možemo
posmatrati kao polinom N-1-vog stepena (svaki bit je koeficijent uz
odgovarajući stepen) nad GF(2). Onda mi dodamo nekih K bita na tih N bita,
i to tako da dobijeni polinom bude deljiv unapred datim polinomom K-tog
stepena.
Dakle, da bismo konstruisali neki niz bita koji daje traženi CRC treba
samo da obrnemo postupak... imamo polinom generator G (to je onaj od K-tog
stepena) i imamo niz od K bita (polinom K-1-vog stepena P) koji predstavlja
CRC. Svi polinomi koji su mogli nastati CRC-ovanjem su tada (G-P)+G*N gde
je N proizvoljan polinom. Dobro, nisu baš svi ovi polinomi rešenja, jer
je uslov da donjih K bita tog polinoma budu nule, ali i to nije teško
postići... ukratko, CRC jeste one-way u tom smislu što je mala verovatnoća
da se pogodi baš ona šifra koja daje taj CRC, ali nije nikakav problem naći
makar jednu (ne nužno polaznu) šifru koja daje dati CRC.
algoritmi.166janko,
-> #156, dragisha> Komercijalni paket... Zovu ga Unix, tek odnedavno se taj
> rezultat transformacije krije, a godinama je bio sasvim
> pristupačan. Kažeš cat /etc/passwd i dobiješ rezultate
> ulaznih transformacija, potrudiš se malo više i nađeš i
> sam algoritam. Postoje razni crack-eri koji će metodom
> uzaludnih pokušaja da nabodu password, ali nijedan ne može
> da ga nađe nekom ziher metodom u obrnutom pravcu.
Ako je algoritam poznat autoru programa za razbijanje, i još
ako je ulazni podatak tog programa rezultat transformacija
originalnog programa, program SIGURNO daje rešenje, zar ne?
Otkud onda znaš, da li "uzaludno pokušava" ili sprovodi svoj
plan?
Evo, matematički, opet, polazne osnove za razbijanje: recimo,
da imamo data 32 bita za koje treba izmisliti lozinku koja će ih
generisati, i algoritam kojima se iz proizvoljne lozinke generiše
tih 32 bita. Očigledno je da se rešavanje problema svodi na
samo rešavanje trideset i dve jednačine. Ne izgleda veliki
problem, naizgled? Današnji računari koji bi se koristili za
razbijanje su izuzetno brzi -- sistem od trideset dve jednačine,
makar i duge, ne izgleda previše velik...
Da se vratimo na Zolikin problem. Zolika je tražio "da se pamti
četiri bajta." Na HP-UX je rezultat transformacije u
/etc/passwd velik trinaest slova, tj. otprilike 9-10 bajtova.
To već izgleda malo sigurnije, ali, očigledno, ne dovoljno,
jer, eto, postoje i programi koji na tim juniks mašinama (koje
nisu mnogo brze, zar ne?) mogu da "unazad" izbunare lozinku.
Postavlja se pitanje, sa koliko je "javnih" bita potrebno
čuvati lozinku, da bi problem postao "pretežak" za razbijanje za
današnje rečunare? Idealno bi bilo, ne više nego što je dužina
prosečne lozinke. Problem je što se to SIGURNO može razbiti,
današnjom tehnologijom, ako se zna algoritam transformacije.
Hajde da odemo u drugu krajnost -- izmislimo neku jako dobru
transformaciju (već postoje) koja će nam kao rezultat dati puno
više bitova -- recimo 1024, koje ćemo ostaviti "javne."
Problem je tu, što se sada može pretpostaviti, za prosečnog
korisnika, da je lozinka koju koristi manja od, recimo,
dvadesetak slova, pa se opet rešava sistem od samo par stotina
jednačina.
Ako ste se nekad pitali, zašto sistem menadžere teraju da npr.
svakog dana menjaju lozinku, i, još, da lozinka ne bude kraća od,
recimo, nekoliko desetina slova, sad vam je verovatno
jasnije...
Zaključak je nedvosmislen -- jeste to lepo, kao cilj,
ostavljati SVIMA "na uvid" ono što je predstavlja lozinke, ali,
očigledno, takva zaštita nije neprobojna.
Primetite da je sam problem "ostavljanja prezentacije lozinke
javno" primetno različit od šifrovanja. Pri šifrovanju, nama
nepoznat tekst se modifikuje. Pri ostavljanju prezentacije
lozinke javno, mi znamo da treba da izmislimo nama nepoznat
tekst koji će dati nama POZNAT rezultat, pri čemu nas ne zanima
kakav je STVARNO nepoznat tekst, i pri čemu imamo relativno
kratak rezultat koji ciljamo!
Na kraju, šta bi Zolika trebalo da radi, da li, onda, uopšte da
implementira neki algoritam za transformaciju lozinke? Odgovor
je, ipak, DA. Kao što i ključevi čuvaju vrata, ali se vrata
mogu razbiti cela, (sa nadom da će to komšije čuti i pozvati
miliciju) tako, lozinke treba čuvati što je više moguće.
Pretpostavimo da sistem, ipak, ne radi kao Junkis -- ne kaže
svakom gostu "izvolte rezultate lozinki," već ih čuva u
fajlovima, koje možda može nekad neko neovlašćeno da pokuša da
pogleda, i da vidi, ali, ipak, i za to treba da se pomuči... U
tom slučaju je vrlo potrebno, da mu to ne bude dovoljno, već da
mora da, ako već nema program koji rešava baš takav slučaj,
angažuje nekog stručnjaka da bi od toga, do čega je došao,
generisao šifru. Već to može da bude dovoljno da, onaj koji se
namerio na razbijanje, odustane. Ili, ako je neka špijunska
služba (nema svako para da plaća sve to, na sreću) da primeni
druge, bezbolnije metode -- npr. prisluškuje telefonsku liniju,
baš dok kucamo šifru. :)
Naravno, sistem privilegija i zaštite fajlova treba da je
takav, da WRITE pristup do pomenutog fajla ima samo sistem
administrator. Na MS-DOS-u, to je, očigledno, isto, kritično
mesto. Može da se, verovatno, postigne vrlo pažljivo napisanim
but i svim ostalim programima i zaključavanjem (klasičnim)
mašine koja se butuje.
Do you want ultimate security? Don't buy computer! -- je
parafraza taga jednog inženjera koji se isključivo bavi
kompjuterskim zaštitama. Možda vam je sada jasnije zašto. :)
algoritmi.167bulaja,
-> #159, zolika│C Snippets
└───
R:\IBMPC\C\*.*
----------------------
snip0493 arj 162332 C-snippets 04/93, zbirka raznih C funkcija (source) #1
snip0493 a01 160019 C-snippets 04/93, zbirka raznih C funkcija (source) #2
algoritmi.168peca.st,
-> #164, niklaus!-> (:> dummy : word;
!-> !! (:> dummy := $ff and ord(data_pŠjĆ);
!-> !!
!-> Hvala za rupu na saxsiji, ali nisi video
!-> da je dummy tipa word, što će reći da se
!-> preslikavaju samo "donjih" 8 bitova
!-> promenljive dummy...
Svašta od tebe. Znači, ako je dummy tipa word, i ja napišem
dummy := 1 onda će samo jedan bit biti promenjen?!???! Ostalih
15 ostaje isto, jel? Ovde dummy postaje ord (data_pŠjĆ) bez sumnje.
!-> (:> !-> CRC := (CRC shl 8) or ((data shl 8) and $ff);
!-> (:> Posle ovakvog reda, prvih 8 bitova će
!-> sigurno biti 0!
!->
!-> Preporučujem ti da ponovo prelistaš
!-> žabarkapu... i data i CRC su opet
!-> word-ovi...
žabarkapu nisam nikada prelistavao ni usmeno ni pismeno,
a nemam ni nameru. Za sada se dobro držim, što se za tebe ne
bi reklo. Lepo sam napisao: prvih 8 bitova će postati 0!
CRC shl 8 vraća 16 bitova od kojih su prvih 8 nula, bez sumnje.
data shl 8 takođe.
16 bitova od kojih su prvih osam nule, kad se enduju sa $ff
daće 16 bitova koji su svi nula, bez sumnje!
Evo primera:
1110 0111 0000 0000 (data shl 8)
and 0000 0000 1111 1111 ($ff)
-------------------
0000 0000 0000 0000
Znači radimo (CRC shl 8) or 0 = (CRC shl 8)
Baš kao što sam napisao: prvih osam bitova je nula.
!-> Prijatelju, u redu si...
Ja sam za sada u redu, hvala na pitanju.
!-> Budi toliko dobar pa ga ti prevedi zoliki...
Da prevodim ono đubre? Nisam lud da trošim vreme na to.
Usput, jedino mi još nisi objasnio čemu služi promenljiva dummy?
!-> (Komentar za ostale) Programčić koji sam
!-> sveo na Pascal nije baš _identičan_
!-> "onom" u Cu, ali za kodiranje šifara je
!-> dobar (u prevodu: nema dečije bolesti,
!-> tipa malko promenite ulazni string, pa se
!-> isto toliko malo menja i izlazna vrednost
!-> CRCa).
E, vidi se kolko znaš o CRCu. Pogledaj malo CRC32 što je poslao nikac.
Promeni jedno slovo, dobićeš totalno drugačiji broj!
Ovaj "tvoj" nazovi CRC16 za ulazne stringove 0 .. 9 daje
samo dve različite vrednosti, slično je ako probaš i sa nekim drugim vrlo
sličnim stringovima, davaće iste vrednosti.
žudi me kako uspevaš da i posle skrenute pažnje na te greške i dalje
praviš iste previde, a još i da ih braniš i pokušavaš da me uveriš da
je 2 + 2 = 5.
Peđa.
algoritmi.169prvul,
-> #166, jankoŮda imamo data 32 bita za koje treba izmisliti lozinku koja će ih
Ůgenerisati, i algoritam kojima se iz proizvoljne lozinke generiše
Ůtih 32 bita. Očigledno je da se rešavanje problema svodi na
Ůsamo rešavanje trideset i dve jednačine. Ne izgleda veliki
Ůproblem, naizgled? Današnji računari koji bi se koristili za
Ůrazbijanje su izuzetno brzi -- sistem od trideset dve jednačine,
Ůmakar i duge, ne izgleda previše velik...
Ů▄▄
Prvo, sistem od tih 32 jednačine ne mora da bude linearan, tako
da opšta metoda za njegovo egzaktno rešavanje ne mora postojati.
Drugo, funkcije koje bi u tim jednačinama figurisale sigurno nisu
diferencijabilne pa čak ni neprekidne, tako da otpada rešavanje
bilo kojim numeričkim metodom. Ostaje samo nasumični postupak, koji
se može optimizovati za date jednačine, ali opet će za traženje
šifre koja daje ta 32 bita morati da se proba nešto reda 2**32,
dakle to sa jednačinama je samo lepa komplikacija, ali ništa ne
pomaže da se provali šifra (osim ako šifru generiše jako glup
algoritam pa jednačine postanu linearne).
Naravno, to ne znači da je 2*32 za današnje računare jako veliki
broj... nije... ali posmatrajmo sledeći problem: algoritam za
dobijanje tog 32-bitnog broja se, recimo, izvršava 0.1 sec. To
pri proveri šifre nije veliki problem (korisnik od trenutka
kucanja lozinke do odziva sistema čeka 1 sec). Međutim, neko ko
hoće da provali tu šifru mora da proba reda 2**32 šifara, a to
puta 0.1 sec je već pozamašno vreme (13 i kusur godina). Ako
tehnologija napreduje pa računari budu 100 puta brži, samo
treba naći algoritam koji bi se opet izvršavao za 0.1 sec i kraj.
Opet, i sada se da naći npr. 100000 puta brži računar, pa
se ova šifra može provaliti za sat-dva. E, ako je neko voljan
da utroši sat vremena na takvom računaru da bi provalio lozinku
na mom BBS-u koji radi na 100000 puta sporijem računaru, neka
mu je :)
Ako se radi ne o BBS-u već o pristupu nekim zaista osetljivim
(top secret :) podacima, onda se koriste Message Digest algoritmi
i to niko živ ne može da probije i kraj priče (btw. nisu ti MD
sistemi tako spori čak ni za BBS primene, ali ipak ne preterujmo).
algoritmi.170ganta,
-> #148, janko> Kako se probija, objavljeno je (ako se sećam) u poslednjim
> Računarima. Za tekst koji je Dejan šifrovao, PC je radio par
> desetina minuta, opet, ako se dobro sećam brojeva.
Hvala, javiću mu da je provaljen :)
algoritmi.171dragisha,
-> #166, janko-> Ako je algoritam poznat autoru programa za razbijanje, i još
-> ako je ulazni podatak tog programa rezultat transformacija
-> originalnog programa, program SIGURNO daje rešenje, zar ne?
-> Otkud onda znaš, da li "uzaludno pokušava" ili sprovodi svoj
-> plan?
On sprovodi plan koji se zasniva na tome (kvaka) da je korisnik lozinku
napravio sa kombinacijom riječi iz riječnika koji cracker ima na
raspolaganju i na nadi crackera da je tačno pretpostavio pravilo koje je
korisnik upotrijebio za kombinovanje tih riječi. To ziher radi za naprimjer
moju lozinku dragisha1, oh_my_god i slične. Zanima me kako bi razbio
passworde 'Poleksija' ili 'dje_si_ojtra'.
SUS, takvi programi se zasnivaju na slabostima sistema koje se daju
izbjeći. Nema crackera koji SIGURNO daje rješenje.
-> jer, eto, postoje i programi koji na tim juniks mašinama (koje
-> nisu mnogo brze, zar ne?) mogu da "unazad" izbunare lozinku.
Nisam čuo za nešto ovakvo. Na šta misliš?
algoritmi.172dragisha,
-> #158, dr.grba-> >> -> I dalje mislim da je rešenje dobro NA ODREĐENOM NIVOU....
-> >>
-> >> Na nivou malog Perice, apsolutno!:))
->
-> 90% ljudi koji pristupaju računarima su na nižem nivou nego mali Perica.
Optimisto:), ima njih i čitavih 98%, a neki se zovu stručnjacima.
Po Marfiju, na instalaciji do koje ti bude stalo da ne pukne naći će se
upravo veliki Perica.
algoritmi.173debelijencija,
-> #162, niklaus!=?> Ma znaš kako. U principu bi mogao da kretanje svakog igrača
!=?> u napadu da definišeš kretanje ukoso cik-cak (znaš kako
!=?> izgleda šematski prikaz binarnog drveta? E tako!). Možeš za
Tja, ovo je malko ograničeno... Ipak, napadači se malo i vraćaju,
pa dodavanja... Nije elementarno, probavao sam ja to da izvedem,
naravno idejno, o programu nisam ni razmišljao ozbiljno, i dođeš
do jedno pet šest situacija pred kojima samo možeš da kažeš: GU! :)
!=?> centarfore... Sličnu, ali malo komplikovaniju logiku
!=?> primenjuješ na odbranbenog igrača. Njemu možeš da uvedeš 4
!=?> smera (NW, NE, SW, SE, you know what I mean?). Da se igrač u
Za odbrambene je malo jednostavnije... On jednostavno juri najbližeg
i gleda da mu uzme loptu, a ako ne može, da ga faulira. Stvarno nije
preterano teško.
Ali, ono što zanemaruješ, je ujedno i najvažnija stvar: SREDINA!
Tamo se odlučuju sve utakmice, i kretanje igrača na tome mesto je
zaosta zavisno od mnooogo faktora... Tamo nešto pametno smisliti
zaista i jeste vrlo teško...
Sećam se da je u Football Manageru 2, to bilo stvarno očajno
glupo rešeno. Oni iz sredine jednostavno samo voze napred, nema dodavanja,
a ako ne može da prođe, onda proba da je dune napred. Tužno. :(
Hvala što pokušavaš da mi pomogneš, možda nešto i zaključimo! :)
algoritmi.174niklaus,
-> #173, debelijencija(:> Tja, ovo je malko ograničeno... Ipak, napadači se malo i vraćaju,
(:> pa dodavanja... Nije elementarno, probavao sam ja to da izvedem,
Ma ništa, onda uvedi i njima mogućnost (taktičkog) vraćanja iz napada.
(:> Ali, ono što zanemaruješ, je ujedno i najvažnija stvar: SREDINA!
(:> Tamo se odlučuju sve utakmice, i kretanje igrača na tome mesto je
(:> zaosta zavisno od mnooogo faktora... Tamo nešto pametno smisliti
(:> zaista i jeste vrlo teško...
Pa "sredini" se najpre posveti preko početnog rasporeda igrača, nakon
čega usleđuje "podbacivanje" i trčanje za loptom u stilu "muve na govno". ((:
Zezam se.
Uopšte smatram da bi mogao da svakom igraču u svakoj od taktičkih
postava (5-3-2, 4-2-4, Lotus123...) mogao da pridružiš "polje dejstva". Pod
time podrazumevam deo terena u okviru koga će se igrač kretati, dok ne bude
fauliran, bez dodavanja sledećem igraču. "Polja dejstva" susednih igrača, po
mojoj proceni, bi trebalo da se seku po nekih 40% saigračevog polja dejstva,
tako da su moguće značajnije promene postave u toku napada (odbrane).
Dalje, u okviru tih polja valja definisati dovoljno realne algoritme
kretanja. Poželjni parametri:
1) blizina odgovarajućeg suparničkog igrača (na osnovu čega će pomak
između dva proračuna pozicije biti veći)
2) blizina najbližeg saigrača u smeru _napad_ (na osnovu čega se pove-
ćava verovatnoća da u sle dećem koraku izvrši "pas")
3) konfiguracija (raspored) kompletne suparničke odbrane (više odbran-
benih igrača na levom krilu prouzrokuje povećanje verovatnoće za skretanje
udesno u sledećem koraku)
4) ...
Može se dodavati još uslova za finije doteravanje formule kretanja,
kao što se u slučaju prvog parametra može uvesti dodatni ulazni parametar, da
se veličina pomaka smanjuje sa brojem saigrača-napadača i sl.
(:> Hvala što pokušavaš da mi pomogneš, možda nešto i zaključimo! :)
Nema se na čemu...
Sve ovo što ovde baljezgam je iz malog mozga, a ne nešto o čemu sam
napisao zadnje tri knjige. Ja ovde glumim usmerivača tvojih ideja, a ti si
prava radna snaga. (;
(:niklaus:)
algoritmi.175zolika,
-> #166, janko
>> Da se vratimo na Zolikin problem. Zolika je tražio "da se pamti
>> četiri bajta." Na HP-UX je rezultat transformacije u
>>/ etc/passwd velik trinaest slova, tj. otprilike 9-10 bajtova.
>> To već izgleda malo sigurnije, ali, očigledno, ne dovoljno,
Dobro, dobro, može i više bajtova, pa nećemo se sporiti oko bajt-dva :-)
algoritmi.176dr.grba,
-> #174, niklaus>> Pa "sredini" se najpre posveti preko početnog rasporeda igrača,
>> nakon čega usleđuje "podbacivanje" i trčanje za loptom u stilu
>> "muve na govno". ((:
Jel' može ovo malo da se preseli tamo gde mu je mesto? Ovde je reč o
programiranju, mahom na PC mašinama. Pa ako tražite algoritme programiranja,
onda OK, a ako tražite algoritme strategije igranja fudbala, onda tome
ovde nije mesto.
Modulatore, probudi se!
algoritmi.177d.petrovic,
-> #174, niklausĂ> (:> Hvala što pokušavaš da mi pomogneš, možda nešto i zaključimo!
Ă> :)
Ă>
Ă> Nema se na čemu...
Ă> Sve ovo što ovde baljezgam je iz malog mozga, a ne nešto o čemu
Ă> sam napisao zadnje tri knjige. Ja ovde glumim usmerivača tvojih
Ă> ideja, a ti si prava radna snaga. (;
Mogli bi da ovo nastavite kroz mail ili u conf igre. Zar nemati ni
malo milosti i pristojnosti?
algoritmi.178niklaus,
-> #175, zolika(:> Dobro, dobro, može i više bajtova, pa nećemo se sporiti oko
(:> bajt-dva :-)
Nego, jel' valja onaj 32-bitni (upravo 4 bajta koja tražiš) algoritam,
koji ti poslah?
(:niklaus:)
algoritmi.180ndragan,
-> #145, dr.grba/ Inženjer informatike sam postao na Višoj Školi za ekonomiju i
/ informatiku,
Nisi ni loš s obzirom na školu ;)
Je li, koliko je bilo vanrednih na jednog redovnog?
NHF, ali smatram da je programiranje nešto što nije trebalo davati
ekonomistima u ruke, a pogotovu ne studirati ga na ekonomiji. Iz
priloženog tebe vidim da si uspešno eskivirao ovu anomaliju našeg
školstva, što za većinu kolega koji su završili studije na ekonomskim
fakultetima, ne mogu da kažem.
O ovome je bilo već reči, pa da ne pravimo replay, a?
algoritmi.181ndragan,
-> #151, kale/ resume-u. U BBS žargonu "sysop" je ono što je na velikim sistemima
/ "system administrator". Na velikim sistemima postoji i "system
/ operater". Nije mi
To zavisi od proizvođača. Big Blju je imao, valjda, sistem programera i
sistem operatera; na vaksu postoji sistem menadžer i sistem operater,
itd. Ovi nazivi su se provlačili čak i kroz sistematizacije radnih
mesta, što je dovodilo do dobrih zabuna kad je šef erca odrastao na aj
bi emu pa kupio vahu, a onu artiju napravi po plavom standardu. Ne bih
se čudio da se kod Hanibala to zove Sysop.
algoritmi.179ndragan,
-> #149, janko/ Ako već potežemo numeričku tačnost, improvizovanje stepenovanja
/ pomoću EXP / LN para daje daleko slabije rezultate od
A tek kombinacija Exp(ln ...) ** ...
Moj princip je da štogod programski jezik ima ugrađeno, sigurno će biti
brže i tačnije nego da ga simuliram.
algoritmi.182janko,
-> #169, prvul> Drugo, funkcije koje bi u tim jednačinama
> figurisale sigurno nisu diferencijabilne pa čak ni
> neprekidne, tako da otpada rešavanje bilo kojim numeričkim
> metodom. Ostaje samo nasumični postupak, koji se može
> optimizovati za date jednačine, ali opet će za traženje
> šifre koja daje ta 32 bita morati da se proba nešto reda
> 2**32
To je samo četiri milijarde pokušaja. Što je još lepše, baš ako
su nasumični, pokušaji su nezavisni -- ne moraju da se dodele
istom procesoru, čak ni istom računaru...
U svakom slučaju, četiri milijarde je opet dosta manje od npr.
1e64, (sve 10-slovne lozinke, npr.) Eto, i Juniks je koristio
duplo više bajtova, pa su ga "razvaljivali." Da li su algoritmi u
Juniksu stvarno toliko loši, da se samo zato lako provaljuju?
U svakom slučaju, imamo, dakle, kristalizovanu ideju, sada: cilj
nam je da mogući "sistem jednačina" ne može da se rešava nekim
"kraćim metodama" od pokušaja redom. Znači, samo da smislimo
funkciju koja to zadovoljava, odredimo koliko je pokušaja
nedostižno za današnje računare -- i rešismo problem.
I dalje mislim da je sigurnije ako nema varijante "izvolte
rezultat transformacije lozinke," na sistemu...
> Ako se radi ne o BBS-u već o pristupu nekim zaista
> osetljivim (top secret :) podacima, onda se koriste
> Message Digest algoritmi i to niko živ ne može da probije
> i kraj priče (btw. nisu ti MD sistemi tako spori čak ni za
> BBS primene, ali ipak ne preterujmo).
Ali ti dajdžesti su znatno duži od četiri bajta?
algoritmi.183dejanr,
-> #182, janko>> I dalje mislim da je sigurnije ako nema varijante "izvolte
>> rezultat transformacije lozinke," na sistemu...
Svakako. Ako čovek već mora da padne u jamu, ne mora je samom sebi
iskopati ;) Dakle, trebalo bi imati dobar algoritam kojim se napadaču
otežava da, ako bi mu šifrat bio poznat, nađe lozinku koja odgovara
tom šifratu. A onda još i šifrat sakriti od "posetioca", čime se sigurnost
dalje povećava.
Dakle, sve znamo, samo nam još treba dobar algoritam ;)
algoritmi.184janko,
-> #183, dejanr> Dakle, sve znamo, samo nam još treba dobar algoritam ;)
Ja (da budem skroman: mislim da) ga znam. Tačnije, znam postupak,
za koji ne nalazim slabosti kakve sam našao u drugim predlozima
koji su se ovde pojavljivali. Ideja je prosta, a da bi se
realizovala, moraju se, naravno, koristiti tekovine naučnika koji
su se bavili srodnim problemima.
I, nešto, imam utisak da nisam jedini u ovoj temi, koji bi to
umeo da izvede... Neću da kažem sa kog su faksa, oni na koje
sumnjam da znaju. ;)
Dobar deo rešenja se krije u već postojećim porukama!
algoritmi.185peca.st,
-> #184, janko!-> I, nešto, imam utisak da nisam jedini u ovoj temi, koji bi to
!-> umeo da izvede...
Ne moraš da budeš jedini da bi bio prvi. :)
So, ajde ti to pošalji bez tolke mistifikacije. :)
Peđa.
algoritmi.186zolika,
-> #178, niklaus>> Nego, jel' valja onaj 32-bitni (upravo 4 bajta koja tražiš) algoritam,
>> koji ti poslah?
>>
>> (:niklaus:)
Poslužiće, zahvaljujem.
algoritmi.187janko,
-> #185, peca.st> !-> I, nešto, imam utisak da nisam jedini u ovoj temi,
> koji bi to !-> umeo da izvede...
> bez tolke mistifikacije.
Nema mistifikacije -- na osnovu dosadašnje priče, CRC algoritam
nije za to. Mesidž dajdžest algoritmi se, takođe, dizajniraju sa
drugim ciljem -- da dve poruke ne mogu da imaju isti "potpis,"
a ne da se od nekog dajžesta ne može lako napraviti BILO KAKVA
poruka (mada je vrlo moguće da neki ima i tu osobinu, u kom
slučaju se može koristiti).
Šta nam ostaje? Kvalitetni algoritmi konvencionalne
kriptografije, (znate oni, što se pišu silne knjige o njima,
radovi... ;) ) kojima je posao da onemoguće upravo ono što i
mi želimo da onemogućimo -- "odmotavanje" unazad, MAKAR i na
osnovu parčeta poznatog teksta, da bi se došlo do šifre ili,
bar, "semena" koje je njen rezultat. Dakle, pristupna lozinka
mora da inicira algoritam kojim će se nešto, što će se posle
proveravati, da li je isto, šifrovati. Rezultat šifrovanja se
jedini pamti. Tako bih ja to radio.
Ako to dobro primenite, po meni, tajne službe će radije
organizovati prepad vašeg računara, prisluškivanje linija dok
kucate lozinku ili nešto slično, nego što će raditi na
provaljivanju pristupne lozinke.
algoritmi.188djelovic,
U konferenciji NOVOSTI, poruka 4.822 se nalazi opis jednog jednosmernog
HASH algoritma. Na žalost, čini se da je previše glomazan za zolikine potebe
:(.
algoritmi.189janko,
Vi koji ste se prihvatili problema "sigurne reprezentacije
pristupne lozinke," pogledajte:
> ===============================
> 4.822 NOVOSTI.4:microb
Tu se izlaže, između ostalog, SHA algoritam, za dobijanje heš
funkcije od date poruke. Ako smo zaključili da CRC32 prvo daje
premalo bita, a, drugo, da je CRC uopšte lako "provaljiv," onda
eto lepog predloga kako dobiti neki broj, reprezent neke
poruke, koji ima puno više bita i koji je "tvrđi" (daje 160
bita).
Da li je on dovoljan da bude reprezent lozinke, tj. da li
obezbeđuje i da se (sa gledišta najjačih kompjutera današnjice i
bliske budućnosti) ne može rekonstruisati od broja NIKAKVA poruka
koja će dati isti broj, ne znam. Ali, jak konvencionalni metod
preko ovih 160 bita je, po meni, sigurna dobitna kombinacija.
algoritmi.190kriss,
-> #188, djelovic˙˙ HASH algoritma. Na žalost, čini se da je previše glomazan za
Ajd sad ja vas da pitam osnovno :)
Kakav je to HASH algoritam? :)
algoritmi.191niklaus,
-> #189, janko(:> Ako smo zaključili da CRC32 prvo daje premalo bita, a, drugo,
(:> da je CRC uopšte lako "provaljiv," onda
Zaključili? Ja nisam.
Molim te pokaži (i dokaži) kako to da je lako provaljiv?
Zašto se koristi u popularnom protokolu ZModemu (i svim manje popu-
larnim posle njega)?
Jednom sam već, nekako apstraktno, rekao da se za 100-njak godina
intenzivnog korišćenja modema korisniku neće desiti da ZModem-u "promakne"
neki "šum-bit". Pitaj Boga na šta će komunikacije da liče za već 10-ak godina.
(:niklaus:)
algoritmi.192dejanr,
-> #191, niklaus>> > Ako smo zaključili da CRC32 prvo daje premalo bita, a, drugo,
>> > da je CRC uopšte lako "provaljiv," onda
>>
>> Zaključili? Ja nisam.
>> Molim te pokaži (i dokaži) kako to da je lako provaljiv?
>> Zašto se koristi u popularnom protokolu ZModemu (i svim manje popu-
>> larnim posle njega)?
CRC32 je, po meni, vrlo dobar za ono za šta se koristi - zaštita od greške
pri prenosu. Međutim, očito ima premalo bitova za "ovo drugo", tj.
zaštitu od namernog napada.
>> Jednom sam već, nekako apstraktno, rekao da se za 100-njak godina
>> intenzivnog korišćenja modema korisniku neće desiti da ZModem-u
>> "promakne" neki "šum-bit".
Hmmm... osećam se jako matoro :) Meni je bar jednom download sasvim
normalno prošao, kad ono greška u ZIP-u. Pošto sam slučajno još bio
on-line kada sam grešku primetio, ja preimenujem PAD pa ga ponovo
skinem, kad ono razlikuju se u podosta bajta jednog sektora. A CvRC,
verovatno, isti.
Verovatnoća jeste mala, ali mislim da nije baš toliko mala!
algoritmi.193kale,
-> #192, dejanr
>> Međutim, očito ima premalo bitova za "ovo drugo", tj. zaštitu od namernog
>> napada.
Nije greda u malo bitova, to bi se dalo povećati, nesreća je što bi se
dao iskonstruisati bez proveravanja značajnog dela mogućih originala. Ako
bi imali algoritam koji radi, broj bitova bi verovatno bio stvar
implementacije.
algoritmi.194peca.st,
-> #187, janko!-> Šta nam ostaje? Kvalitetni algoritmi konvencionalne
!-> kriptografije, (znate oni, što se pišu silne knjige o njima,
Ok. E, sad kad bi još imao neki primer za to - pa gde bi nam
bio kraj. :))
Peđa.
algoritmi.195janko,
-> #191, niklaus> (:> Ako smo zaključili da CRC32 prvo daje premalo bita, a,
> drugo, (:> da je CRC uopšte lako "provaljiv," onda
>
> Zaključili? Ja nisam.
Tvoj problem. ;) Nisi pažljivo čitao.
> Molim te pokaži (i dokaži) kako to da je lako provaljiv?
Brkaš kontekste. Pričali smo o algoritmu za reprezentaciju
pristupnih lozinki sistemu, a ne za proveru "napada šuma."
Baš u ovoj temi, skoro, pojavila su se čak dva (doduše, sa
istom idejom) dokaza da je CRC za te primene izuzetno lako
provaljiv.
> Zašto se koristi u popularnom protokolu ZModemu (i svim
> manje popu- larnim posle njega)?
Zato što tu služi svrsi detekcije šum bitova, uz određena
ograničenja koja imaju smisla u datim realnim uslovima.
> Jednom sam već, nekako apstraktno, rekao da se za 100-njak
> godina intenzivnog korišćenja modema korisniku neće desiti
> da ZModem-u "promakne" neki "šum-bit".
CRC32 detektuje SVAKI šum bit, ako je razmak između prvog i
poslednjeg šum bita u poruci koju štiti manji od trideset dva
bita. Preko toga, nije dizajniran da obavezno detektuje, ali,
nekad mu uspe.
algoritmi.196janko,
-> #194, peca.st> kad bi još imao neki primer za to - pa gde bi
> nam bio kraj. :))
Kamo lepe sreće, za to "gde bi nam bio kraj." Imam "neki primer
za to," a i svi ostali -- ceo sors PGP-a je, ako se sećam, u
nekom Sezamovom direktorijumu. Ali ne nadajte se da je to nešto
što ide u tri reda. ;) Kvalitet se ne postiže bezbolno.
algoritmi.197janko,
-> #190, kriss> Kakav je to HASH algoritam? :)
Heš funkcijama, ili, našim terminima, funkcijama rasutog
adresiranja, obezbeđuje se, obično, što ravnomernije
"rasipanje" većih ulaznih veličina u neki manji prostor. Ove
funkcije su jedan od fundamentalnih metoda u današnjoj
računarskoj tehinci.
algoritmi.198janko,
-> #193, kale>>> Međutim, očito ima premalo bitova za "ovo drugo", tj.
>>> zaštitu od namernog napada.
>
> Nije greda u malo bitova, to bi se dalo povećati, nesreća
> je što bi se dao iskonstruisati
...neki ekvivalent originala...
> bez proveravanja značajnog dela mogućih originala.
algoritmi.199paki,
-> #192, dejanr> Hmmm... osećam se jako matoro :) Meni je bar jednom download sasvim
> normalno prošao, kad ono greška u ZIP-u. Pošto sam slučajno još bio
Mi 2 :)
algoritmi.200slom,
Evo ga jedan program a vi probajte da otkrijete koji mi je password.
Ne kazem da je funkcija dobra/losa jer ni sam ne znam, jednostavno
iskopao sam parce koda, malko ga prepravio pa da vidimo.
Username: slom
Password: <- ovo treba da otkrijete
Rezultat transformacije je: swdrtpgzb
uslovi:
username - minimalno 3, maksimalno 10 slova (mala=velika)
password - minimalno 3, maksimalno 10 slova+cifara (mala<>velika)
sm
convert.zipalgoritmi.201prvul,
-> #200, slomŮ Evo ga jedan program a vi probajte da otkrijete koji mi je password.
Ů▄▄
A kada sam hteo da napišem FAQ o kriptografiji, kompresiji i sličnim
stvarima rekli su da je malko preterano... :(
Dakle, nemojte slati programe uz poruke sadržaja sličnog citiranom.
Opišite lepo algoritam pa ćemo ga onda analizirati i videti koliko je
dobar i za šta. Ako pošaljete samo program, treba da znate nekoliko
stvari:
1) Ako bude potrebno, iz svakog programa će se izvući algoritam, tako
da tajenje algoritma nije nikakva zaštita od pravih hakera.
2) Program koji priložite jako malo ljudi će uopšte hteti da dl-uje
(ja sigurno ne), a još manje da ga razbija... nema motiva:
a) materijalno se tim razbijanjem ne dobija ništa
b) neće se proslaviti time
c) nije izazov
Ovo pod b) i c) je iz prostog razloga što neko ko je razbio zaštite
nekoliko svetski poznatih paketa nema razloga da "poene" nabija na nečijim
amaterskim pokušajima, a baš takvih se treba plašiti.
Sve u svemu, ako hoćete da napišete algoritam pa da ga "evaluiramo", ok.
Ako nećete, onda algoritam verovatno nije dobar, jer dobar algoritam je
po pravilu onaj koji štiti i onda kada je poznat.
algoritmi.202kale,
-> #195, janko
>> CRC32 detektuje SVAKI šum bit, ako je razmak između prvog i
>> poslednjeg šum bita u poruci koju štiti manji od trideset dva
>> bita. Preko toga, nije dizajniran da obavezno detektuje, ali,
>> nekad mu uspe.
Da mi je tu sveska iz predmeta "Osnove Računarskih Telekomunikacija",
sad bih se ja "setio" garancija koje daje tridesetdvobitni CRC koji je tada
koristio USA DOD (Department Of Defence).
Ovako, po sećanju, mislim da detektuje sve greške gde je promenjeno do 5
bita i sve greške gde je promenjen neparan broj bita.
algoritmi.203slom,
-> #201, prvul
OK, nije mi bila namera da krijem algoritam.
Evo ga ide i source.
sm
PS: dakle koji je password ?
convert.c