Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Atak brute force - Wikipedia, wolna encyklopedia

Atak brute force

Z Wikipedii

Ten artykuł dotyczy Algorytmu metodą Brute Force. Zobacz też: Brute Force – gra wideo z 2003.

Algorytm siłowy, algorytm brute force (ang. "brutalna siła") – określenie algorytmu, który opiera się na sukcesywnym sprawdzeniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu, zamiast skupiać się na jego szczegółowej analizie.

Jest to zwykle nieoptymalna, ale najprostsza do zaimplementowania i najbardziej skuteczna metoda postępowania (ponieważ teoretycznie pozwala ona złamać każde hasło – praktycznie może to potrwać nawet tysiące i miliony lat). W zależności od kontekstu, w którym termin brute force zostaje użyty, może mieć on nieznacznie różne definicje.

Spis treści

[edytuj] W programowaniu

W slangu programistycznym, termin ten odnosi się do dowolnego algorytmu, który rozwiązuje problemy przez weryfikację i ocenę wszystkich wariantów postępowania, na przykład wszystkich możliwych ścieżek między dwoma punktami, by wybrać optymalną trasę poruszania się postaci w grze komputerowej.

[edytuj] W bezpieczeństwie komputerowym

W bezpieczeństwie pojęcie ataku brute force używane jest do opisania przeprowadzanych przez człowieka lub program komputerowy prób przełamania zabezpieczeń – na przykład odgadnięcia hasła – przez sukcesywne sprawdzanie wszystkich możliwości.

[edytuj] Jako atak kryptologiczny

W kryptologii, przykład zastosowania algorytmu brute force to metoda, w której wypróbowywane są wszystkie możliwe kombinacje cyfr, liter i innych znaków kodu ASCII (klucze), do momentu, aż klucz pasujący do szyfru zostanie znaleziony, czyli otrzymana zostanie informacja w postaci jawnej, odszyfrowanej.

Atak może przykładowo polegać na tym, że komputer sprawdzi wszystkie możliwe kombinacje kluczy od 000 000 000 do 999 999 999, przy założeniu, że klucz składa się jedynie z dziewięciu cyfr.

Atak brute-force może być przeprowadzony wobec prawie wszystkich szyfrów symetrycznych i szyfrów asymetrycznych. Szczególnie jeśli znanych jest kilka par tekst jawny-szyfrogram (atak ze znanym tekstem jawnym) lub jeśli znana jest część szyfrogramu (atak ze znanym szyfrogramem) i możliwe jest rozróżnienie poprawnego tekstu jawnego od niepoprawnego. Na przykład jeśli wiadomo, że tekst jawny jest dokumentem HTML, to w większości szyfrów praktycznie wszystkie złe klucze generować będą przypadkowe dane, a ten klucz, który wygeneruje dokument HTML, będzie prawdopodobnie kluczem poprawnym. Weryfikację poprawności odszyfrowanego tekstu jawnego umożliwia skrót MD5 tekstu jawnego wiadomości, której szyfrogram łamany. Oczywiście, gdy skrót MD5 dla wiadomości jest znany.

Na atak brute-force całkowicie odporny jest szyfr z kluczem jednorazowym wykorzystujący szyfrowanie XOR lub polialfabetyczne.

Szczególnie dużego znaczenia nabiera metoda brute-force, jeśli z powodu wyboru niewłaściwej metody generacji klucza, przestrzeń możliwych kluczy zostaje zawężona do pewnego podzbioru. Na przykład jeśli podczas wyboru hasła, zamiast stosować wszelkie możliwe kombinacje liter cyfr i znaków, których liczba dla sześciu znaków hasła wynosi ok. 366, zbiór kombinacji ograniczony zostanie tylko do haseł będących zdrobnieniami nazw klubów piłkarskich, których w Polsce jest kilkadziesiąt. Jeśli atakujący potrafi ocenić jaką metodę generacji kluczy wybrał szyfrujący, nawet zastosowanie formalnie bezpiecznego algorytmu szyfrowania nie zabezpiecza przed atakiem brute-force.

Ciekawym aspektem odporności na atak brute force jest następująca cecha: algorytm szyfrowania jest tym odporniejszy na atak brute force im wolniej działa. Jeśli zatem zaszyfrowanie nawet niewielkiego jawnego komunikatu wymaga dużej aktywności obliczeniowej i czasu np. rzędu 1 s, to atak brute force usiłujący sprawdzić wynik szyfrowania tekstu jawnego w celu odgadnięcia klucza straci nieporównanie więcej czasu przeszukując zbiór możliwych kluczy, niż w wypadku szybkiego algorytmu. Z punktu widzenia użytkownika niska szybkość szyfrowania może wydawać się wadą, a w pewnych wypadkach nawet ograniczać możliwość użycia algorytmu (np. szyfrowanie transmisji dźwięku).

Atak taki jest wykonywalny np. wobec algorytmu DES.

Szybkość ataku zależy tylko od złożoności pojedynczej operacji T i długości klucza k i wynosi w najgorszym wypadku:

2kT

Statystycznie klucz znaleziony zostanie po połowie prób, czyli oczekiwany czas to:

2k − 1T

Na przykład jeśli klucz ma 32 bity i jedna próba trwa milionową część sekundy, to łamanie potrwa średnio:

2^{31} 10^{-6} s \approx 2147 s \approx 36 m, czyli nieco ponad pół godziny

Jeśli klucz ma 48 bitów i używamy 1000 komputerów, z których każdy potrafi wykonać milion prób na sekundę, to czas łamania wynosi:

2^{47} 10^{-3} 10^{-6} s \approx 39 h, czyli półtora dnia

Łamanie 56-bitowego szyfru (np. DES) na tym samym sprzęcie trwałoby:

2^{55} 10^{-3} 10^{-6} s \approx 416 dni

Łamanie 128-bitowego szyfru (AES) na milionie komputerów, każdym potrafiącym wykonać miliard prób na sekundę zajęłoby:

2^{127} 10^{-6} 10^{-9} s \approx 11 milionów miliardów lat,

czyli ok. 500 tysięcy czasów życia wszechświata (przyjmując, że ma 20 miliardów lat).

[edytuj] Przykładowy program brute-force w C

#include <stdio.h>
#include <string.h>
 
#define CHARS 26
#define MAX_LEN 5
 
char sChars[CHARS];
char *sHaslo = "haslo";
 
// Można tu oczywiście dodać więcej zakresów znaków (nawet całe ASCII)
void prepare_chars()
{
   for (char i=0;  i<CHARS; ++i)
   {
      sChars[i] = 'a'+i;
   }
}
 
// To można zastąpić dowolną funkcją sprawdzającą dane hasło
void test_password(char *sPassword)
{
   if (!strcmp(sPassword, sHaslo))
   {
      printf("Zgadnieto haslo! (%s=%s)\n", sPassword, sHaslo); // i prawdopodobnie: zakończ program
   }
}
 
void brute(char *sString, int nLen, char *sPoczatek)
{
   if (nLen == 0)
   {
      test_password(sPoczatek);
   }
   else
   {
      for (int i=0; i<CHARS; ++i)
      {
         sString[0] = sChars[i];
         brute(sString+1, nLen-1, sPoczatek);
      }
   }
}
 
int main()
{
   prepare_chars();
   char sString[MAX_LEN + 1];
   sString[MAX_LEN] = 0;
   brute(sString, MAX_LEN, sString);
   return 0;
}


stub To jest tylko zalążek artykułu związanego z matematyką i informatyką. Jeśli możesz, rozbuduj go.

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com