Anyways: How are the keys for the files generated?
It's a random string not hash
Of which length and how generated (/dev/random, /dev/urandom, some library...)?!
How and where are these keys stored?
All in all the only thing that this encryption is good for is that if someone gets onto one of your storage nodes, the attacker still needs to break the database with your key(s). All the data can be decrypted without the uploader's knowledge by you and it gets transmitted in plaintext over the net... this leads me to https support: planned?
Also in the end all you do is provide a front-end to AWS... make sure you don't get a high bill because someone writes a script to upload billions of 1 byte files *cough*...
By the way:
I upload a file, don't enter a bitcoin address and close the web page - what happens?! File gets deleted, file gets deleted after 1 week, ...?!