Diceware
Crystal Diceware — générateur de passphrases Diceware.
Diceware (Arnold Reinhold, 1995) génère des passphrases mémorables à entropie mesurable :
- On lance N fois 5 dés à 6 faces ;
- Chaque tirage
1 3 4 5 6indexe un mot dans une wordlist de 7776 (= 6^5) entrées ; - La concaténation des N mots forme la passphrase.
Avec N=7, l'entropie est de 7 × log₂(7776) ≈ 90 bits — niveau standard 2026 pour une passphrase humaine de longue durée.
API
Cas le plus simple :
require "diceware"
phrase = Diceware.generate(words: 7)
# => "abacus pinacle catalpa serment grenouille ablation luminaire"
Choix explicite de la liste :
Diceware.generate(words: 7, language: :fr_mbelivo_5d)
Diceware.entropy(words: 7, wordlist: :fr_mbelivo_5d)
# => 90.47
Tirage manuel à partir de dés physiques :
rolls = ["13456", "41522", "26611", "55432", "33214", "11111", "62524"]
Diceware.generate(words: 7, source: :manual, rolls: rolls)
Sources d'aléa
:auto—Random::Secure(/dev/urandom). Défaut.:manual— l'utilisateur fournit ses jets enrolls:.:hybrid— K mots:auto+ (N-K) mots:manual. Compromis quand on ne fait pas pleinement confiance au PRNG sans pour autant lancer 35 dés à la main.
Constants
Sépare les mots dans la passphrase produite par #generate.
Lue au compile-time depuis shard.yml via le macro read_file.
Cf. note mémoire feedback_shard_version_macro.md (mémoire ALOLI).
Class methods
Calcule l'entropie en bits d'une passphrase Diceware de
words mots tirés uniformément dans une liste de taille N.
H = words × log₂(N)
Pour N = 7776 et words = 7 → ~90.47 bits.
Calcule l'entropie en bits d'une passphrase Diceware de
words mots tirés uniformément dans une liste de taille N.
H = words × log₂(N)
Pour N = 7776 et words = 7 → ~90.47 bits.
Génère une passphrase Diceware.
words— nombre de mots tirés (entropie ≈ words × 12.92 bits)language— id de la liste (:eff_long,:fr_mbelivo_5d…) ounilpour auto-détection via$LANGsource—:auto(défaut) |:manual|:hybridrolls— pour:manualou:hybrid: liste de chaînes"13456"(ordre d'apparition dans la passphrase)auto_words— pour:hybrid: combien deswordspremiers mots sont générés en:auto(les autres en:manualà partir derolls)separator— chaîne entre les mots (défaut : un espace)