begin process at 2012 02 12 22:01:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

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

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


 Information sur la source

Note :
Aucune note
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é :25 792 / 600

Auteur : contax

Ecrire un message privé
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

Les Membres Club peuvent 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 :

 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

Commentaires et avis

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)

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,919 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales