Build a password generator capable of deriving strong, reproducible passwords from easy to remember hints.
One way to securely store and share passwords is by using a password manager. It is a recommended and widely used solution, but not without problems. See for example:
Proposed generator is an alternative approach with two main advantages: (1) passwords are generated on demand and never stored - there is no danger of data breach (2) there is no master password to remember.
The table below illustrates how from the same hint,
using easily customizable pepper
and salt
options
(here: pepper
= '+', salt
= 'salt')
completely unrelated passwords with different length are generated
hint | length | generated password |
---|---|---|
mos | 8 | Xvyqf+0V |
mos | 16 | xdBl3qU6bZvZ+A4X |
mos | 32 | 1dtyBU1zuGBS+tPxrbZbppOqGrYaQJQH |
Note: pepper
string (1 or more characters) is used to provide special
character typically required in passwords
- https://passwordmaker.org (also on Github)
- http://passwordgen.org (also on GitHub)
- bootstrap - JavaScript module (npm install bootstrap)
- workbox - Production-ready service worker libraries and tooling
- https://web.dev/progressive-web-apps/ -
- https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
- https://jakearchibald.github.io/isserviceworkerready/
- https://hnpwa.com/ - a lot of examples with code
- https://www.pwabuilder.com
- use secure web storage?
- automate publishing to pages.github.io
- web browser plugin and PWA (progressive web app) - these probably can use content scripts to detect that pointer is in the password input box... some related Stackoverlow items:
- native smartphone apps (Android, iOS)
- progressive web application
- add logo e.g.
icons/logo.png
generated with DALL-E - compile node js to byte-code
- run local server for testing e.g.: python -m http.server 8080
- https://web.dev/how-to-use-local-https/
- install local https server to facilitate pwa testing: https://github.com/FiloSottile/mkcert
- https://www.arubacloud.com/tutorial/how-to-enable-https-protocol-with-apache-2-on-ubuntu-20-04.aspx
- https://www.arubacloud.com/tutorial/how-to-create-a-self-signed-ssl-certificate-on-ubuntu-18-04.aspx
$ ./mkcert -install
Created a new local CA 💥
Sudo password:
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! 🦊
Here are pointers to some resources:
- Chrome extensions samples
- How to make a Chrome browser extension from scratch | Understanding Chrome extension anatomy
- https://web.dev/progressive-web-apps/
- https://simplepwa.com/
- https://github.com/hemanth/awesome-pwa
- https://github.com/mdn/pwa-examples
- https://github.com/vaadin/expense-manager-demo
- PWA Series: Hands-on, create your first PWA, step by step
- Hello-pwa
- https://web.dev/install-criteria/#criteria
- https://www.freecodecamp.org/news/publish-your-website-netlify-github/
- Building & Deploying your first Progressive Web App
- https://www.udemy.com/course/progressive-web-apps/learn/lecture/7171264
I could not find any password generators which would generate reproducible password given a hint, and possibly some other parameters.
- https://passgen.io/
- https://passgen.co/
- https://www.avast.com/en-us/random-password-generator
- https://www.nexcess.net/web-tools/secure-password-generator/
- https://www.dashlane.com/features/password-generator
- https://www.grc.com/passwords.htm
This can be useful to hash user emails e.g.
const { v5: uuidv5 } = require('uuid');
const EMAIL_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
uuidv5('[email protected]', EMAILS_NAMESPACE); // -> '28e0fb10-e6ba-5663-9eb4-54e0b9607643'
uuidv5('[email protected]', EMAILS_NAMESPACE); // -> '5337ff34-e3d4-5234-bc8a-0baa84a4fb48'
This way we can check if user (i.e. email) is in the system without actually storing emails
- Norton LifeLock Accounts Targeted (2023-01-19)
- Lastpass: Hackers stole customer vault data in cloud storage breach (2022-12-22)
-
document.querySelectorAll('input[type="password"]')
can be used to select input box (or boxes?) for password in the active page (see this stackoverflow entry) -
Element.getClientRects() - might be useful to get coords of input box, maybe also jQuery .position()?
-
How to get access to DOM elements? from popup? See also Firefox version of chrome extensions
-
How to inspect source code of browser extension?; go to:
chrome://extensions/
to get ID of the extension (e.g. ID=aeblfdkhhhdcdjpifhhbdiojplfjncoa for1password
)chrome://version/
to get Profile Path (e.g.$HOME/.config/google-chrome/Default
)$HOME/.config/google-chrome/Default/Extensions/<ID>
- this is where the source code is located- use e.g.
https://www.freeformatter.com
to format JavaScript code
-
Build a Chrome Extension – Course for Beginners
- illustrates how use chrome API to communicate between
content.js
script, which runs in the context of the page (and has access to DOM elements) and running in the background service workers. - to create and add new elements to the elements in
the page e.g. popup icon like
1password
popping up in the password input box! using.appendChild()
- illustrates how use chrome API to communicate between
- NIST Password Guidelines and Best Practices for 2020
- NIST Digital Identity Guidelines
- 8 chrome extensions
- Episode 552: Matt Frisbie on Browser Extensions
- Android emulator
- Comparing Browser-based Password Managers: Is There Any Difference?
- WebDev Learn PWA
- PWA from scratch (freecodecamp)
- Simulate mobile devices with Device Mode
- Web App manifest generator
- PWABuilder
- Progressive Web Apps: The Concise PWA Masterclass