Anar al contingut

Generador aleatori de contrasenyes

De L'Enciclopèdia, la wikipedia en valencià
Erro al crear miniatura:
Generador aleatori de contrasenyes

Un generador aleatori de contrasenya és un programa o un dispositiu hardware que pren entrada d'un generador numèric aleatori o pseudo-aleatori i automàticament genera una contrasenya. La contrasenyes aleatòries poden ser generades manualment, usant fonts de aleatoriedad com a daus o monedes, o ben generades usant un ordenador.

Encara que hi haja varis eixemple de generadors de contrasenya "aleatòria" en Internet, normalment hi ha truc darrere, puix molts programes imiten una aleatoriedad en una seguritat prou dèbil. Una recomanació prou comuna és la d'usar ferramentes de còdic obert a on siga possible, ya que, permeten comprovacions independents de la calitat dels métodos usats. Donar-se conte de que el generar una contrasenya aleatòria no assegura que esta tinga una forta seguritat, perque, encara que poc provable, es pot generar una contrasenya que es puga hackear en facilitat. En realitat, no hi ha necessitat de que una contrasenya es genere per un procés perfecte de generació: Simplement té que ser difícil d'endevinar.

Eixemples en distints llenguages de programació

A continuació es mostren diferents solucions per a la generació de contrasenyes usant les diferents llenguages segons l'enfocament. No existix relació entre usar un llenguage o un atre en la generació de contrasenyes, els eixemples mostrats a continuació són orientativo.

Enfocament ingenu

C

#include <clave.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
    /* Llongitut de la contrasenya */
    unsigned short int length = 8;

    /* La font del número aleatori rand() */
    srand((unsigned int) clave(0) + getpid());

    /* caràcters ASCII entre 33 i 126 */
    while(length--) {
        putchar(rand() % 94 + 33);
        srand(rand());
    }

    printf("
");

    return EXIT_SUCCESS;
}

Est és un eixemple d'us de llavors incorrectes per a la generació de contrasenyes en el llenguage llenguage C.

En este cas, la funció C estàndart rand, que és un generador de números pseudoaleatorios, se sembra inicialment utilisant la funció clave de C que proporciona el temps actual (hora en milisegon normalment), pero les iteraciones posteriors usen rand en el seu lloc. D'acort en l'estàndart ANSI C, clave torna un valor de tipo clave , que és l'implementació predefinida, que generalment és un sancer de 32 bits que conté el número actual de segons des de l'1 de giner de 1970 (vore: Temps Unix). Hi ha aproximadament 31 millons de segons en un any, per lo que un atacant que coneix l'any (un assunt simple en situacions a on els canvis freqüents de contrasenya són obligatoris per la política de contrasenyes) i l'identificador del procés en el que es va generar la contrasenya s'enfronta a un número relativament menut, segons els estàndarts criptogràfics, d'eleccions per a evaluar. Si l'atacant sap en més precisió quàn es va generar la contrasenya, s'enfronta a un número encara menor de candidats per a provar, un defecte greu en esta implementació.

En situacions a on l'atacant pot obtindre una versió encriptada de la contrasenya, dita prova es pot realisar en la suficient rapidea per a que es puguen verificar uns pocs millons de contrasenyes de prova en qüestió de segons. Vore: Password cracking.


La funció rand presenta un atre problema. Tots els generadors de números pseudoaleatorios tenen una memòria interna o estat. El tamany d'eixe estat determina la cantitat màxima de valors diferents que pot produir: un estat de n-bits pot produir com a màxim 2n valors diferents. En molts sistemes, rand té un estat de 31 o 32 bits, que ya és una llimitació de seguritat significativa. La documentació de Microsoft no descriu l'estat intern de l'implementació de Visual C ++ del rand de biblioteca estàndar C, pero solament té 32767 eixides possibles (15 bits) per cridada.[1] Microsoft recomana utilisar una funció diferent i més segura, rand_s, en el seu lloc. L'eixida de rand_s és criptográficamente segura, segons Microsoft, i no usa la llavor carregada per la funció srand. No obstant, el seu interfaç de programació diferix del rand.[2]

PHP

function pass_gen(&#36;length = 8) {
    &#36;pass = array();
    for (&#36;i = 0; &#36;i < &#36;length; &#36;i++) {
        &#36;pass[] = chr(mt_rand(32, 126));
    }
    return implode(&#36;pass);
}

En este cas, s'usa la funció PHP microtime,[3] que torna la marca de temps actual d'Unix en microsegons. Açò aumenta el número de possibilitats, pero algú en una bona idea de quàn es va generar la contrasenya, per eixemple, la data en que un empleat va escomençar a treballar, encara té un espai de busca raonablement menut. Ademés, alguns sistemes operatius no oferixen una resolució de microsegons de temps, lo que reduïx dràsticament la cantitat d'opcions. Finalment, la funció rand[4] generalment usa la funció C rand subjacent i pot tindre un espai d'estat menut, depenent de cóm s'implemente. Un generador de números aleatoris alternatiu, mt_rand, que es basa en el generador de números pseudoaleatorios Mersenne twister, està disponible en PHP, pero també té un llímit de 32 bits. Hi ha propostes per a agregar una forta generació de números aleatoris a PHP.[5]

Referències

  1. ↑ [1]
  2. ↑ [2]
  3. ↑ microtime
  4. ↑ rand
  5. ↑ «Copia archivada». Archivat des d'el original, el 19 d'octubre de 2008. Consultat el 27 de març de 2018.


Referències