Btw, DeadDrop was the original name of Aaron Swartz' software which later became SecureDrop.
it’s zero-knowledge encryption. That means even I, the creator, can’t decrypt or access the files.
I'm sorry to say... this is not quite true. You (or your web host, or a MITM adversary in possession of certificate authority key) can replace the source code at any time - and can do so on a per-user basis, targeting specific IP addresses - to make it exfiltrate the secret key from the uploader or downloader.
Anyone can audit the code you've published, but it is very difficult to be sure that the code one has audited is the same as the code that is being run each time one is using someone else's website.
This website has a rather harsh description of the problem: https://www.devever.net/~hl/webcrypto ... which concludes that all web-based cryptography like this is fundamentally snake oil.
Aside from the entire paradigm of doing end-to-end encryption using javascript that is re-delivered by a webserver at each use being fundamentally flawed, there are a few other problems with your design:
- allowing users to choose a password and using it as the key means that most users' keys can be easily brute-forced. (Since users need to copy+paste a URL anyway, it would make more sense to require them to transmit a high-entropy key along with it.)
- the filenames are visible to the server
- downloaders send the filename to the server prior to the server sending them the javascript which prompts for the password and decrypts the file. this means you have the ability to target maliciously modified versions of the javascript not only by IP but also by filename.
There are many similar browser-based things which still have the problem of being browser-based but which do not have these three problems: they store the file under a random identifier (or a hash of the ciphertext), and include a high-entropy key in the "fragment" part of the URL (the part after the #
symbol) which is by default not sent to the server but is readable by the javascript. (Note that the javascript still can send the fragment to the server, however... it's just that by default the browser does not.)
I hope this assessment is not too discouraging, and I wish you well on your programming journey!
also "you may not remove or obscure any functionality in the software related to payment to the Licensor in any copy you distribute to others." 🤡
FUTO's license meets neither the free software definition nor the open source definition.