Força bruta – Wikipédia  a enciclopédia livre
3 pág.

Força bruta – Wikipédia a enciclopédia livre


DisciplinaAlgoritmos14.809 materiais172.684 seguidores
Pré-visualização1 página
Força bruta
Origem: Wikipédia, a enciclopédia livre.
Em ciência da computação, força bruta (ou busca exaustiva) é uma algoritmo trivial mas de uso muito geral
que consiste em enumerar todos os possíveis candidatos de uma solução e verificar se cada um satisfaz o
problema.
Por exemplo, um algoritmo para encontrar os divisores de um número natural é enumerar todos os inteiros de
1 a , e verificar para cada um se ele dividido por resulta em resto 0.
Esse algoritmo possui uma implementação muito simples, e sempre encontrará uma solução se ela existir.
Entretanto, seu custo computacional é proporcional ao número de candidatos a solução, que, em problemas
reais, tende a crescer exponencialmente. Portanto, a força bruta é tipicamente usada em problemas cujo
tamanho é limitado, ou quando há uma heurística usada para reduzir o conjunto de candidatos para uma espaço
aceitável. Também pode ser usado quando a simplicidade da implementação é mais importante que a
velocidade de execução, como nos casos de aplicações críticas em que os erros de algoritmo possuem em
sérias consequências.
Índice
1 Aplicação na ordenação
2 Aplicação em problemas avançados
3 Exemplo de ataque
4 Referências
Aplicação na ordenação
Um exemplo clássico de aplicação de algoritmos da classe da força bruta é a ordenação, que pode ser aplicada
nos mais diferentes tipos de dados.
Por exemplo, uma das formas de resolver o problema consiste em procurar o menor elemento e colocá-lo na
primeira posição, operando sucessivamente com os demais elementos da lista a ser classificada até finalizar a
operação, um método conhecido como ordenação por inserção.
Outro exemplo é a busca de padrões. Dada uma cadeia de caracteres de tamanho (o "texto") e outra cadeia
com tamanho menor ou igual chamada "padrão". É realizada uma procura no "texto" pelo "padrão",
verificando-se todo o texto em busca de múltiplas ocorrências. O funcionamento da busca de padrão é simples:
se o primeiro caractere é idêntico à um referente no texto, todos os sucessores devem ser idênticos também,
até finalizar o padrão. Caso ocorra que um caractere não seja igual, desloca-se o padrão em um caractere até
chegar ao fim do texto ou encontrar o padrão.
rotina BuscaPadrao(texto[0 ... n-1], padrao[0 ... m-1])
 para i \u2190 0 até n \u2013 m faça
 j \u2190 0
 enquanto j < m e padrao[j] = texto[i + j] faça
 j \u2190 j + 1
 se j = m então
 retorne i
 retorne -1
Note que o algoritmo desloca-se após a comparação do primeiro caractere, porém nem sempre é assim. O
pior caso é &quot;muito pior&quot;: o algoritmo tem que comparar todos os caracteres antes de se deslocar, e isso
pode ocorrer para cada uma das tentativas. Portanto, o pior caso para este algoritmo está em 
. Para textos de linguagem natural, o caso médio é melhor (pois ocorre nas primeiras comparações).
Até em textos aleatórios, o comportamento se mostra linear, .
Aplicação em problemas avançados
Um exemplo é o problema do par mais próximo, que consiste em achar os dois pontos mais próximos em um
conjunto de pontos. Para o exemplo a seguir, por simplicidade se assume o plano cartesiano, de forma que a
distância é calculada pela distância euclidiana. O algoritmo de força bruta percorrerá o conjunto, e selecionará
o par com menor distância, ignorando pontos na mesma posição.
rotina ParProximo(P)
 dmin \u2190 \u221e
 para i \u2190 1 até n \u2013 1 faça
 para j \u2190 i + 1 até n faça
 d \u2190 raiz((xi - xj)² + (yi \u2013 yj)²)
 se d < dmin
 dmin \u2190 d
 ind1 \u2190 i
 ind2 \u2190 j
 retorne ind1, ind2
Exemplo de ataque
O grupo que gerencia o programa 7-Zip criou um exemplo de quanto tempo demoraria para um atacante burlar
um sistema através de força bruta, segue abaixo a tradução do problema:
Ataque de acordo com o número de caractere da senha
Isto é uma estimativa de tempo requerido para um exaustivo ataque de senha (força bruta), sendo que a
senha é uma seqüencia aleatória de letras minúsculas latinas.
Vamos supor que um usuário possa controlar 10 senhas por segundo e que uma organização com um
orçamento de $1 bilhão (mil milhões) de dólares possa controlar 1 bilhão de senhas por segundo. Também
supomos que o processador em uso duplica seu desempenho a cada dois anos, assim, cada letra latina que
acrescentarmos será adicionada 9 anos de um exaustivo ataque de senha.
O resultado é esta estimativa de tempo para ter sucesso num ataque:
Tamanho da senha Ataque de um usuário comum Ataque da organização
1 letra minúscula latina 2 segundos 1 segundo
[1]
2 1 minuto 1s
3 30 min 1s
4 12 horas 1s
5 14 dias 1s
6 1 ano 1s
7 10 anos 1s
8 19 anos 20s
9 26 anos 9 min
10 37 anos 4 horas
11 46 anos 4 dias
12 55 anos 4 meses
13 64 anos 4 anos
14 73 anos 13 anos
15 82 anos 22 anos
16 91 anos 31 anos
17 100 anos 40 anos
Observação: O exemplo abrange apenas uma senha com letras latinas minúsculas, ou seja, uma
senha que possua apenas letras de &quot; a - f &quot;. Ao colocar a possibilidade de existir letras maiúsculas
e símbolos especiais aumentará ainda mais o tempo para se realizar todas as possibilidades de um
ataque.
Referências
1. \u2191 O conteúdo original pode ser encontrado na seção &quot;7z format&quot; da &quot;General Information&quot; do arquivo de ajuda
do programa &quot;7-Zip&quot; na versão &quot;4.58&quot;, sendo que o mesmo se encontra sob a licença GNU LGPL, tendo assim
a permissão para a copia e modificação do texto sem aviso prévio do grupo compositor do mesmo. (em inglês)
Obtida de &quot;http://pt.wikipedia.org/w/index.php?title=Força_bruta&oldid=28809380&quot;
Categorias: Algoritmos Criptografia
Menu de navegação
Esta página foi modificada pela última vez à(s) 00h52min de 10 de fevereiro de 2012.
Este texto é disponibilizado nos termos da licença Atribuição-Partilha nos Mesmos Termos 3.0 não
Adaptada (CC BY-SA 3.0); pode estar sujeito a condições adicionais. Consulte as condições de uso
para mais detalhes.