V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.
ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím
… více »ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.
Strands Decider 2B je malý open-source model s 2 miliardami parametrů, určený k rychlé klasifikaci vstupů a rozhodování mezi možnostmi, generující odpovědi ve stylu modelu Jev. Strands dosáhl přibližně 72% shody s Jevem na veřejné testovací sadě JevBench (tento benchmark pochopitleně nepředstavuje přímé srovnání s modelem Jev). Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache-2.0, váhy modelu na Hugging Face.
Ve věku 90 let zemřela americká softwarová inženýrka Margaret Hamiltonová, která vedla tým, jenž vyvíjel letový software pro program Apollo amerického Národního úřadu pro letectví a vesmír (NASA).
Ako som už spomínal, potreboval som použiť AES. Je to symetrický šifrovací algoritmus pracujúci na blokoch pevnej dĺžky. Pre jeho použitie je potrebné najprv vytvoriť šifrovací kľúč stanovenej dĺžky. Šifrované dáta samozrejme chceme chrániť heslom – ktoré ale má byť ľubovoľne dlhé. Tento rozpor môžeme jednoducho vyriešiť tým, že z užívateľom zadaného hesla spočítame hash a ten sa potom použije ako šifrovací kľúč. Ako možno viete, hashovacia funkcia je funkcia, ktorá pre ľubovoľné vstupné dáta vygeneruje blok dát pevnej dĺžky. Pritom má tú vlastnosť, že je ťažké nájsť iné vstupné dáta, pre ktoré hashovacia funkcia vrátí rovnakú hodnotu a teda aj minimálna zmena vstupných dát znamená zmenu vo výstupe hashovacej funkcie. Ako však zrátať hash? Opäť prichádza na pomoc OpenSSL. Ponúka niekoľko hashovacích algoritmov. Ja som si zvolil SHA1.
#include <openssl/sha.h> … SHA_CTX c; unsigned char sha1[32]; memset(sha1,0,sizeof(sha1)); SHA1_Init(&c); SHA1_Update(&c,password,strlen(password)); SHA1_Final(sha1,&c);
Ako ste si možno všimli, premenná sha1 je pole 32 bajtov, ale SHA1 produkuje 160bitový hash – teda 20 bajtov. 32 potrebujeme kvôli AES, ktoré môže použiť kľúče dĺžky 128, 192 alebo 256 bitov. Ak by sme chceli počítať SHA1 z dlhších dát, môžeme volať funkciu SHA1_Update() opakovane:
SHA1_Init(&c); while ((length=read(fd,block,sizeof(block)))>0) SHA1_Update(&c,block,(unsigned long)length); SHA1_Final(sha1,&c);
Keď už máme blok dát, ktorý môžeme použiť ako šifrovací kľúč, môžeme ho použiť pre inicializáciu AES algoritmu v OpenSSL:
#include <openssl/aes.h> … AES_KEY encryptionKey; int keyBits=192; AES_set_encrypt_key(sha1,keyBits,&encryptionKey);
Algoritmus AES (podobne ako iné blokové šifrovacie algoritmy) môže pracovať v rôznych módoch. Mód ECB je jednoduchší, pretože výsledok šifrovania bloku dát závisí len od kľúča a vstupného bloku dát. Zložitejší (a bezpečnejší) je CBC, pri ktorom výsledok šifrovania Ntého bloku závisí od výsledku šifrovania bloku predchádzajúceho. Pre situáciu, ktorú som potreboval riešiť ja, však postačoval ECB mód:
unsigned char *inputBlock; unsigned char *outputBlock; int enc=AES_ENCRYPT; // for decryption AES_DECRYPT AES_ecb_encrypt(inputBlock, outputBlock,&encryptionKey,enc);
Ak enc má hodnotu AES_ENCRYPT, tento kód zoberie 16 bajtov (128 bitov) plaintextu z inputBlock a umiestni zašifrovaný blok 16 bajtov na outputBlock. Ak má enc hodnotu AES_DECRYPT, tak inputBlock ukazuje na zašifrované dáta a dešifrované dáta budú uložené na outputBlock.
Funkcia pre šifrovanie v CBC móde má trocha viac parametrov:
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
const unsigned long length, const AES_KEY *key,
unsigned char *ivec, const int enc);
length je počet bajtov na vstupe, ivec je „inicializačný vektor“, ktorým sa prenáša informácia medzi jednotlivými blokmi.
Problémom pri použití blokovej šifry je zistenie, koľko bajtov vlastne má mať výstup. Na výstupe totiž dostaneme vždy násobok veľkosti AES bloku – 16 bajtov. Riešenie je v použití „zarovnania“ – angl. padding. To sa spravidla implementuje tak, ako to predpisuje PKCS#5. Teda tak, že bajty, ktoré chýbajú v poslednom bloku, sa vyplnia hodnotou určujúcou, koľko bajtov treba odobrať od konca dešifrovaných dát tak, aby sme dostali správnu dĺžku. Ak napríklad potrebujem zašifrovať 25 bajtov dát, tak nájdeme najbližší násobok 16 (veľkosť AES bloku) – to je 32. Bajty od 26 po 32 pred zašifrovaním vyplníme hodnotou 7 (teda 32-25). Po rozšifrovaní potom stačí zobrať posledný bajt a podľa neho vieme, koľko bajtov bolo použitých pre padding. Ak na vstupe už máme násobok veľkosti bloku, umelo doplníme na vstupe jeden blok obsahujúci len padding.
Pri prehrabávaní sa v OpenSSL som narazil na ďalší kus funkcionality, ktorý sa mi hodil. Chcel som výsledok šifrovania zapísať do textovej formy, ktorú možno prenášať ako tlačiteľný text. V praxi sa na tento účel používa kódovanie BASE-64. Po krátkom pátraní som prišiel na to, že existujú prinajmenšom dve kódovania BASE-64. Jedno ponúka libc vo funkciách a64l() a l64a() – zodpovedajú POSIX-u, ale všetci používajú MIME-BASE 64, ktoré používa inú sadu znakov. A práve tento druhý variant ponúka OpenSSL.
Okrem hashovacích a šifrovacích funkcií OpenSSL obsahuje aj knižnicu nazvanú BIO – čo je abstrakcia sady vstupných a výstupných funkcií. Ide vlastne o sadu metód, ktoré fungujú ako čierna skrinka. Možno do nich na jednej strane zapisovať a na druhej strane čítať. Jednou takouto metódou je „mem“. Vyrobí ju funkcia BIO_s_mem() a do všeobecného rozhrania ju obalí BIO_new():
#include <openssl/bio.h> #include <openssl/evp.h> … BIO bio=*BIO_new(BIO_s_mem());
Na takto získanú premennú je možné použiť BIO_write() a BIO_read():
int BIO_read(BIO *b, void *buf, int len); int BIO_write(BIO *b, const void *buf, int len);
Metóda „mem“ má tú vlastnosť, že tie isté dáta, ktoré do nej zapíšeme, z nej
aj prečítame. Ďalšou metódou je napr. tá, ktorú vracia funkcia BIO_f_base64(). Má tú vlastnosť, že to, čo do nej zapíšeme, si táto metóda ukladá v kódovaní MIME-BASE64 a to, čo z nej prečítame, je zasa spätne dekódované. Dve metódy možno zreťaziť použitím funkcie BIO_push():
BIO *mem=BIO_new(BIO_s_mem()); BIO *b64=BIO_new(BIO_f_base64()); BIO *bio=BIO_push(b64,mem);
Pri takomto zreťazení dáta zapísané do bio môžeme prečítať z mem a dostaneme MIME-BASE64 zakódované dáta. Naopak MIME-BASE64 kódované dáta zapísané do mem môžeme prečítať z bio a dostaneme pôvodná dáta. Uvoľnenie dát spojených so štruktúrou BIO robí funkcia BIO_free(). Pokiaľ boli viaceré BIO štruktúry zreťazené, uvoľní ich naraz BIO_free_all(). Chovanie týchto stavebných blokov môžeme ovplyvniť napr. nastavením flagov funkciou BIO_set_flags().
Napr. volanie
BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
zariadi, že text generovaný takouto metódou nebude automaticky ukončený znakom nového riadku. Okrem „mem“ a „base64“ existujú rôzne ďalšie BIO metódy, ktoré napr. vedia zo vstupných dát zrátať SHA1 alebo MD5, nastaviť ako vstup (alebo výstup) súbor či socket, šifrovať ich atď. Napr. nasledujúci kúsok kódu číta MIME-Base64 kódované dáta a tlačí na štandardný výstup pôvodné nekódované dáta:
BIO *fl=BIO_new_file("inputfile.dat","r");
BIO *b64=BIO_new(BIO_f_base64());
BIO *bio=BIO_push(b64,fl);
char ch;
while (BIO_read(b64,&ch,1)>0)
printf("%c",ch);
BIO_free_all(bio);
A tento vypíše SHA1 vstupného buffra:
char sha1[20];
memset(sha1,0,sizeof(sha1));
BIO *sha1bio=BIO_new(BIO_f_md());
BIO_set_md(sha1bio,EVP_sha1());
/* to discard the written data after calculating SHA1: */
BIO_push(sha1bio,BIO_new(BIO_s_null()));
BIO_write(sha1bio,buffer,bufferLength); /* can be called several times */
BIO_flush(sha1bio);
BIO_gets(sha1bio,sha1,sizeof(sha1));
for (i=0;i<sizeof(sha1);i++)
printf("%02x",sha1[i]&0xff);
printf("\n");
OpenSSL je rozsiahla knižnica a my sme sa len dotkli niektorých tém. Ale dúfam, že vás zaujali.
Šifrovanie s dĺžkou kľúča 192 alebo 256 bitov môže podliehať exportným obmedzeniam.Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
pochuťiť.
SHA1_Init(&c); SHA1_Update(&c,password,(unsigned long)strlen(password)); SHA1_Final(sha1,&c);Už ani nemá cenu číst dál, protože v článku je jasně naznačen špatný způsob programování. strlen totiž vrací size_t a né unsigned long a nelze spoléhat na to, že size_t je stejně velký jako unsigned long. Pokud SHA1_Update opravdu chce unsigned long jako argument znamenající velikost bufferu, pak je to špatně navržená funkce.
int SHA1_Update(SHA_CTX *c, const void *data, size_t len);(teda aspoň v sha.h, v nápovede je stále unsigned long)
sha je pole 32 znaku. ne vsude je znak bajtovy.
#include "gcrypt.h" //...etc..
gcry_md_hd_t digest=0;
int num;
char buffer[4096];
FILE*instream=fopen("foo","rb");
gcry_md_open(&digest,GCRY_MD_SHA1,0);
while ((num = fread(buffer, 1, 4096, instream)) != 0)
gcry_md_write (digest, buffer, num);
char * result = gcry_md_read (digest,0);
for(num=0; gcry_md_get_algo_dlen (GCRY_MD_SHA1) > num ; ++num)
printf ("%02x",result[num]);
printf ("\n");
gcry_md_close (digest);
a nekamenujte me jestli vam to nepude skompilit napoprvy, psal sem to skoro zpameti.