I have finally figured out what I want Algoa to be. First things first. The code is available at: https://github.com/vaethis/algoa As I have said in previous posts, I expect people to understand some technology. If you are new to programming, or none of the below makes sense, I really do not care. I am using, Django, Python, PIP, GIT as utilities/languages and Redis. Blockchain, Quantum cryptography as concepts.
Algoa will utilize quantum key exchange (albeit simulated) as a way to generate a secure key exchange. Until I become smart enough to figure that out, I am utilizing the quantumrandom python library (https://pypi.python.org/pypi/quantumrandom/) as a means of generating true random data. I want to develop a completely secure way of communicating and file transfer/storage while developing it in such a way it can expand into different areas. Those different areas have yet to be determined since I am just starting the project.
A couple of other things
- The system shall be resilient
- The system shall automatically adjust to a variety of situations:
- Over use
- Decrypted keys
- Extendable, ability to add other communication methods other than chat and files
- Have 99.9999999% uptime
- Extremely cheap, I want the entire system to be under 50 bucks a month for 10,000 users
- The system shall be packed in a docker container so that it can be extended in the cloud
- The system shall be packed in such a way that it can utilize AWS cloudformation or code deploy
- I want it so that I do a git push and everything is pushed, tested, deployed, expanded without any interaction. Ive done this in the past so it is doable.
- Testing! Unit tests or shit will fail
- All features should be Django apps. This will allow for extensions and when quantum encryption is truly available (aside from the half ass 5 qubit system we have now, you cant do anything with 5 qubits. Come on), we can easily switch apps and utilize the true quantum systems.
The below is a list of interactions:
User > Website > Generate Key > Keys are generated randomly. User > Website > Delete Key > Keys can be deleted
- User > Generate X number of keys
- User > If a user runs out of keys, new ones are generated automatically. Most likely a mute thing
- User > Keys > Can delete keys (if needed) Would not impact decryption. If a key is deleted then a new one would be assigned
- User > Website > File Manager
- Keys > Redis > UUID > UUID part of file metadata
- Keys > Redis > UUID > UUID part of chat metadata
- Keys > Used in file and chat data, discarded after decrypted. New keys are generated for every new encryption request. Each user will have a default number of 100 randomly generated keys for messages and files. Once the 100 keys are exhausted, another set of 100 is generated.
- Keys > Keys are associated with UUIDs. File/chat decryption happens on the client and never on the server.
- Blockchain > Miner > Tries to decrypt a Key. If a key is decrypted, the keys length will be increased for files and chat.
- Blockchain > Miner > If a key is decrypted, a reward/coin is given
- File Manager > Lists encrypted files based on keys that were not figured out by blockchain. I am not quite sure if I want to use IPFS or S3 yet. I would prefer IPFS.
- File Manager > If a key was figured out, a new key is used to encrypt the file and the old key is automatically discarded.
- Chat > Uses keys that were not figured out by blockchain and discarded after every message sent/received.
- System> Only accept bitcoin
- System > Manages interactions between block chain/file manager/chat
Right now everything is coded in Django/Python. I have had half a mind to switch to NodeJS/Angular, but damn I am lazy. With this system, the possibility of a key being decrypted is extremely low. If a key is figured out, it is discarded everywhere.
What have I finished so far?
- Basic web UI
- Ability to create/delete keys
What am I working on now?
- The blockchain
- The chat (I had it working but somehow deleted it)
- The file manager (Again, I had it working but somehow deleted it)
What do I want to finish?
- I want to polish the turd