Náhodná čísla a kryptografie v C# PDF
Document Details
Uploaded by StrongPanda9595
Tags
Summary
Tento dokument popisuje principy generování náhodných čísel v programovacím jazyce C#. Shrnuje rozdíly mezi pseudonáhodnými a pravými náhodnými čísly a vysvětluje důležitost kryptografické kvality. Dokument je primárně zaměřen na teoretické koncepty a implementaci v C#.
Full Transcript
5. Náhodná čísla a náhodná čísla bez opakování, kryptografická kvalita náhodných čísel Pseudonáhodná čísla Random nejsou skutečně náhodná stejný seed = stejný výsledek (vhodné pro testování kde potřebujeme nstejnou náhodnost) jsou vypočtena PRNG (PseudoRandom Number Generator)...
5. Náhodná čísla a náhodná čísla bez opakování, kryptografická kvalita náhodných čísel Pseudonáhodná čísla Random nejsou skutečně náhodná stejný seed = stejný výsledek (vhodné pro testování kde potřebujeme nstejnou náhodnost) jsou vypočtena PRNG (PseudoRandom Number Generator) generují se softwarově (generátory pseudonáhodných čísel) v okamžiku aktivování generátoru vznikne random seed (systémový čas, datum,...) rychlejší generování sekvence se začne opakovat Seed výchozí hodnota/počáteční stav generátoru pseudonáhodných čísel nastavuje se automaticky podle systemového času dá se specifikovat Random random1 = new Random(42); stejný seed = stejná sekvence čísel Random random = new Random(); int randomNumber = random.Next(); // Náhodné celé číslo int randomInRange = random.Next(1, 101); // Náhodné číslo v rozmezí 1 až 100 double randomDouble = random.NextDouble(); // Náhodné číslo typu double mezi 0.0 a 1.0 Next() vrací celé číslo (int) mezi 0 a Int32.MaxValue. Next(min, max) generuje číslo v intervalu 0; i--) // Procházení seznamu od posledního prvku { // Náhodně vybereme index mezi 0 a i (včetně) int j = random.Next(0, i + 1); // Prohození prvku na aktuálním indexu 'i' s prvkem na náhodném indexu 'j' (numbers[i], numbers[j]) = (numbers[j], numbers[i]); } // Výběr prvních 10 čísel po zamíchání List firstTenNumbers = numbers.Take(10).ToList(); // Vezmeme prvních 10 čísel z náhodně zamíchanéh efektivnější způsob je ukládání čísel do hashsetu Pravá náhodná čísla generována na základě fyzikálních procesů (atmosferický šum - elektrické impulzy z bouřek,...) - nepředvídatelné generuje se harwarově seed - vstup z kamery, rozdíly v poxelech v obrázku teplota CPU, pohyb myší,... True Random Number Generator (TRNG) použití tam, kde je nutna maximální bezpečnost Kryptografická kvalita náhodných čísel je zásadní pro bezpečnost v šifrovacích algoritmech, generování klíčů, digitální podpisy,... budoucí hodnoty nelze předpovědět ani při znalosti všech předchozích hodnot odolné vůči analýze a reverznímu inženýrství Cryptographically Secure Pseudorandom Number Generator (CSPRNG) RandomNumberGenerator z knihovny System.Security.Cryptography RNGCryptoServiceProvider using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int min = 1; // Rozsah náhodných čísel int max = 100; // Vytvoření seznamu čísel List numbers = new List(); for (int i = min; i 0; i--) { int a = rand.Next(i + 1); // Generování náhodného indexu int b = numbers[i]; // Uchování hodnoty na pozici i numbers[i] = numbers[a]; // Přiřazení hodnoty z náhodného indexu numbers[a] = b; // Přiřazení původní hodnoty na náhodné místo } // Výpis zamíchaných čísel foreach (int number in numbers) { Console.WriteLine(number); } } } další příklad může být generování bezpečného hesla (allowed chars) Náhodná šísla v C# Next() - generování náhodného celého čísla NextInt64() - pro generování náhodného dlouhého čísla NextBytes() - vyplní prvky zadaného rozsahu nebo pole bajtů náhodnými čísly NextDouble() - pro generování náhodného desetinného čísla od 0.0 až 1.0 (double je větší než float - 62 - 32bitů) NextSingle() - náhodný float od 0.0 až 1.0 Šifrování V šifrování jsou náhodná čísla nezbytná. Vytváří se díky nim veškeré klíče a nepředvídatelnost v kryptografii. Symetrické a Asymetrické Symetrické šifrování používá stejný klíč pro šifrování i dešifrování dat Asymetrické šifrování používá pro každý jeden klíč Pojmy entropie - způsob měření "náhodnosti" "nepředvídatelnosti"