Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GÉNÉRATEUR DE NOMBRES PSEUDO-ALÉATOIRES (PSEUDO RANDOM NUMBER GENERATOR - LFSR)


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Initié Date de création : 05/02/2005 Date de mise à jour : 13/03/2005 09:38:55 Vu / téléchargé: 21 220 / 526

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Voici un générateur de nombres pseudo-aléatoires basé sur la description faite par Bruce Schneier d'une "cascade de Gollmann" (Cryptographie appliquée, page 411 de l'édition française).
J'ai choisi de l'implémenter avec 20 registres à décalage (lfsr) :  un de 128 bit, 3 de 64 bit et 16 de 32 bit.  L'implé est assez algorithmique et certainement pas optilmisée (voir les appels direct au CPU pour la rotation des mots de 32 bits).
Les polynômes primitifs pour les opérations sur ces registres sont choisis en fonction de la graine (992 bit). Ils sont tous denses et calculés avec le logiciel de calcul formel MUPAD. La graine est stocké dans un fichier ("/bin/seed.txt" pour l'exemple), elle doit être changée après chaque utilisation dans la pratique (on peut utiliser les 992 derniers bits générés ...).
J'ai implémenté une version graphique des tests simples du FIPS 140-1. Ca fonctionne sous linux + X11 et c'est opensource.
 

Source

  • /* just a sample, see the zip file for more */
  • /*
  • * Copyright (c) 2004-2005, contax. All rights reserved.
  • *
  • * LICENSE TERMS
  • *
  • * The free distribution and use of this software in both source and
  • * binary form is allowed (with or without changes) provided that:
  • *
  • * 1. distributions of this source code include the above copyright
  • * notice, this list of conditions and the following disclaimer;
  • *
  • * 2. distributions in binary form include the above copyright notice,
  • * this list of conditions and the following disclaimer in the
  • * documentation and/or other associated materials;
  • *
  • * DISCLAIMER
  • *
  • * This software is provided 'as is' with no explicit or implied
  • * warranties in respect of its properties, including, but not limited to,
  • * correctness and fitness for purpose.
  • */
  • #include <unistd.h>
  • #include <sys/mman.h>
  • #include <stdio.h>
  • #include <errno.h>
  • #include "destroy.h"
  • #include "./lfsr/lfsr.h"
  • #define _RANDOM_LOCAL
  • #include "random.h"
  • #undef _RANDOM_LOCAL
  • LFSR_CTX *
  • rand_init(int fd)
  • {
  • LFSR_CTX *ctx;
  • uint32_t *sd;
  • if (NULL == lfsr_alloc(ctx)) {
  • perror("lfsr_alloc");
  • return NULL;
  • }
  • if ((void *) -1 == (sd = (uint32_t *)
  • mmap(0, 31 * sizeof(uint32_t), PROT_READ |
  • PROT_WRITE, MAP_PRIVATE, fd, 0)))
  • {
  • perror("projection");
  • lfsr_ctx_free(ctx);
  • return NULL;
  • }
  • (void) lfsr_init(ctx, sd);
  • munmap(sd, 31 * sizeof(uint32_t));
  • return ctx;
  • }
/* just a sample, see the zip  file for more */

/*
 * Copyright (c) 2004-2005,  contax. All rights reserved.
 * 
 * LICENSE TERMS
 * 
 * The free distribution and use of this software in both source and
 * binary form is allowed (with or without changes) provided that:
 * 
 * 1. distributions of this source code include the above copyright
 * notice, this list of conditions and the following disclaimer;
 * 
 * 2. distributions in binary form include the above copyright notice,
 * this list of conditions and the following disclaimer in the
 * documentation and/or other associated materials;
 *
 * DISCLAIMER
 * 
 * This software is provided 'as is' with no explicit or implied
 * warranties in respect of its properties, including, but not limited to, 
 * correctness and fitness for purpose. 
 */

#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>
#include <errno.h>
#include "destroy.h"
#include "./lfsr/lfsr.h"
#define _RANDOM_LOCAL
#include "random.h"
#undef  _RANDOM_LOCAL


LFSR_CTX       *
rand_init(int fd)
{
    LFSR_CTX       *ctx;
    uint32_t       *sd;

    if (NULL == lfsr_alloc(ctx)) {
        perror("lfsr_alloc");
        return NULL;
    }
if ((void *) -1 == (sd = (uint32_t *)
                    mmap(0, 31 * sizeof(uint32_t), PROT_READ |
                         PROT_WRITE, MAP_PRIVATE, fd, 0)))
    {
        perror("projection");
        lfsr_ctx_free(ctx);
        return NULL;
    }
    (void) lfsr_init(ctx, sd);
    munmap(sd, 31 * sizeof(uint32_t));

    return ctx;
}

Conclusion

Si vous avez un message d'erreur concernant X11 à l'issue de l'édition de liens,  c'est que vos fichier d'en-tête et votre librairie X11 ne se trouvent pas dans le répertoire /usr/X11R6/  : changez les références dans le fichier /rand/bin/subdir.mk.

mode d'emploi :
  unzip *****.zip && cd /rand/bin && make && Xtest  nom_du_fichier_de_graine  [nb_de_points_dessinés]
  le nombre de point dessinés est optionnel (65000 par défaut).

les tests dépendent des 20000 premiers bits générés. Il ne changent donc pas en fonction du nombre de points dessinés mais en fonction de la graine !
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

05 février 2005 12:35:35 :
06 février 2005 15:05:11 :
Ajout d'un appel à munmap oublié (random.c). Ajout de la capture d'écran.
12 mars 2005 21:06:47 :
13 mars 2005 09:36:16 :
13 mars 2005 09:38:55 :

Commentaires et avis

signaler à un administrateur
Commentaire de malik7934 le 07/02/2005 08:09:40

Hello,

Ca m'a l'air pas mal tout ça, faudra que je le teste ;o)

Une question tout de même: est ce que ta référence dit si c'est un PRNG cryptographiquement sûr ou algorithmiquement sûr? Car même si un PRNG est proche de l'aléatoire, même si  la graine est  cryptographiquement sûr,  il faut que les fonctions soient impossibles à retrouver à partir de samples...

En tous cas bravo ;o)

signaler à un administrateur
Commentaire de contax le 07/02/2005 12:48:00

Cryptographiquement sûr en 1996 (date de la parution du livre) ... depuis je ne sais pas.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.