Password generated by computers, i.e. rand() aren't actually random, but psuedorandom algorithms generating theoretically predictable values. Our product is an innovate and cheap solution to generate truely random passwords, using our custom algorithm paired with the movements of a lava lamp. Lava Lamps have colorful blobs, high entropy, and unpredictable movements. By capturing its movements and converting it into a alpha-numeric password, our project ensures a truely random password is generated for any user that cannot be compromised
Our core design principle was the concept of a Entropy Pool, which commbines many sources of entropy to ensure randomness and protect aganist compromised entropy sources.
Presentation Slides: https://docs.google.com/presentation/d/1EIy8LIbipyi1lDbUQc2crH4B44QuDY-TR8yPyWPd7V0/edit?usp=sharing
Psuedocode Input: 1 x (int) length of password, 4 x (int[][][]) RGB pictures
Psuedocode Output: 1 x (string) password
- Purpose: Efficently capture and encode movements of material in lava lamps.
- Psuedocode: Take 4 pictures spaced over X seconds —> Grey scale images(opencv) —> Compute transition change frames(1->2, 3->4) between pictures(opencv absdiff()) —> stack transition frames
- Output: 3D matrix
- Purpose: Processing data to a lower dimension, low-rank matrix, and ensure high variance in output.
- Psuedocode: Perform SVD (approximate matrix) on 3D matrix from previous step. Use vT from output from now on.
- Psuedocode Output: 2D matrix
- Purpose: Funneling processed data, into a single array, in an unpredictable way.
- Psuedocode: Utilize the Reservior Sampling Algorithm to uniformly sample data from previous step.
- Psuedocode Output: 1D matrix (Length of Password)
- Purpose: Converting each element(double data type) in the 1D matrix(from above) into characters .
- Psuedocode: Convert doubles to ints -> select all_characters[int % (array size)] for each value in array. all_characters has a-z, A-Z, 0-9, !@#$%^&()+){}<>?|=[];/ and/or 85 characters to chose from.
- Psuedocode Output: Password