Freeware. Generates a random passphrase from a list of words. Included is the Bitcoin BIP39 list and the original Diceware list. Other lists can be used also by reading the list into the program. The program can also generate an 'ordinary' password for different security levels (2^96, 2^128, 2^256) - random bytes are generated and the password/passphrase is the hexadecimal, base64 or numeric representation of the wanted number of bytes.
At program startup a seed B of 128 bytes is initialized with certain hashed values of processes and threads in the computer.
When random bytes are needed the RNGCryptoServiceProvider of the C# language is used to generate random 32 bytes A.
C=A2 xor B2
After the calculation of C2 a new B is formed by calculating B_new=sha512(B_old), ie. the first 64 bytes of B_old are sha512 hashed to form the first 64 bytes of the B_new and the next 64 bytes of the B_old are sha512 hashed to form the next 64 bytes of the B_new.
The generated word or password string is based
on C2 e.g. for
an 'ordinary' password the string is the hexadecimal, base64 or numeric
representation of C2, consisting of 12, 16 or 32 bytes for the
security levels 2^96, 2^128 and 2^256.
During program run the seed (B) is updated during mouse movements etc. an old value is xored with a new measurement:
index=(index+1) % 128
B[index]=B[index] xor new_measurement
The % operation is the modulo operation.