Skip to content

Secure your web links with GoodLOCK encryption right in your browser, while seamlessly generating concealed bookmarks without the need for any browser extensions.

License

Notifications You must be signed in to change notification settings

TheColdPrince/goodlock

 
 

Repository files navigation

GoodLOCK

Password-protect URLs using AES in the browser.

About

Link Lock is a tool for encrypting and decrypting URLs. When a user visits an encrypted URL, they will be prompted for a password. If the password is correct, Link Lock retrieves the original URL and then redirects there. Otherwise, an error is displayed. Users can also add hints to display near the password prompt.

Each encrypted URL is stored entirely within the link generated by the application. As a result, users control all the data they create with Link Lock. Nothing is ever stored on a server, and there are no cookies, tracking, or signups.

Link Lock has many uses:

  • Store private bookmarks on a shared computer
  • Encrypt entire web pages (via URL Pages)
  • Send sensitive links over public or insecure channels (e.g., posting links to a public website that require a password to access)
  • Implement simple CAPTCHAs – particularly effective against basic web scrapers that do not respect robots.txt
  • Add a password to shared Dropbox or Google Drive links
  • Share password-protected magnet links and torrents
  • Evade censorship

Link Lock uses AES in GCM mode to securely encrypt passwords, and PBKDF2 and salted SHA-256 (100,000 iterations) for secure key derivation. Encryption, decryption, and key derivation are all performed by the SubtleCrypto API. The initialization vector is randomized by default, but the salt is not. Randomization of both the initialization vector and salt can be enabled or disabled by the user via "advanced options." The salt and initialization vector are sent with the encrypted data if they are randomly generated. The API is versioned such that old encrypted links will always work, even if later versions of Link Lock are updated to be more secure. Please read the code (api.js in particular) for more information.

Read the Hacker News discussion here.

Also discussed on r/netsec and discussed on r/programming.

Examples

Disclaimer

The code was written to be read. Please read it, especially if you don't trust me to build a secure encryption application. In particular:

  • GoodLOCK is founded upon an open-source project authored by jstrieb, which goes by the name Link-Lock, and can be found on the GitHub platform.
  • Once someone decrypts a link, they can share the original URL as much as they want. Only share encrypted links with trusted people.
  • I am not comfortable using JavaScript, and I don't have a firm grasp of the nuances of the language – there may be bugs that I don't even know to check for.
  • This is the first project I have ever done using encryption – there is likely a subtle mistake somewhere.
  • Most of the encryption/decryption code is based on MDN tutorials for the SubtleCrypto API.

Usage

  • Create a locked link here: https://thecoldprince.github.io/goodlock.
  • Once you have a locked link, create a hidden bookmark here: https://thecoldprince.github.io/goodlock/hidden.
  • Use the advanced options when creating a link to make the encryption more secure (at the cost of a longer link).
    • By default, the initialization vector is randomized for security, but this can be disabled, even though doing so is a vulnerability.
    • By default, the salt used to hash the password during key derivation is not randomized, but this can be enabled.
  • To bookmark a locked link, drag it from the output box to the bookmarks bar. Alternatively, visit the locked link and bookmark it before entering the password.
  • If you lose the password, it is almost impossible to recover the original link. The strong security guaranteed by encryption can be a blessing or a curse if you are not careful!
  • Currently, the only way to recover a lost password is by trying all possible options (very slowly) by brute force. An example application to brute force Link Lock URLs in the browser can be found here: https://thecoldprince.github.io/goodlock/bruteforce.
  • If you receive a Link Lock URL that you do not trust, decrypt it using this interface that does not automatically redirect: https://thecoldprince.github.io/goodlock/decrypt.

Evading Censorship

Link Lock can be used to evade censorship. If you are concerned that sending links with the thecoldprince.github.io domain name will put you at risk, just replace the domain with another. For example, share

https://wikipedia.org/#eyJ2IjoiMC4wLjEiLCJlIjoiYUgrNDhISkpBWWhkeFFMc0l0VlIzeFlma21mYlZCOFJ5Zz09In0=

instead of

https://thecoldprince.github.io/goodlock/#eyJ2IjoiMC4wLjEiLCJlIjoiYUgrNDhISkpBWWhkeFFMc0l0VlIzeFlma21mYlZCOFJ5Zz09In0=

Any domain can be used in place of wikipedia.org. That way, a malicious third-party who clicks the altered link will be taken to a valid page, which helps alleviate suspicion. When sharing the password to unlock the link, explain how to switch out the domain name with either thecoldprince.github.io/goodlock, or with the path to a local clone of Link Lock. Using a local copy is particularly recommended for evading censorship, since no request to my domain is ever made.

Alternatively paste the altered link directly into the decrypt page. This page does not check the domain name of the pasted link, only the "fragment" (the part after the #). So, for example, the Wikipedia link above can be pasted directly in there and decrypted without changing the domain.

Project Status

This project is actively maintained.

Support the Project

There are a few things you can do to support the project:

  • Star the repository and follow me on GitHub
  • Share and upvote on sites like Twitter, Reddit, and Hacker News
  • Report any bugs, glitches, or errors that you find

About

Secure your web links with GoodLOCK encryption right in your browser, while seamlessly generating concealed bookmarks without the need for any browser extensions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 47.6%
  • HTML 45.4%
  • CSS 7.0%