Project - Key Vault

Keeping track of your password 'keys' that grant access to your private places is a worsening problem... because passwords should all be frequently changed, but all be different, long, obscure - making them difficult (if not impossible) to remember.

Staying logged in to websites for days/weeks/months is ok while the relevant cookies are still available in the browser, but when needing to subsequently sign in at a different computer or browser it can be difficult to even remember the login ID let alone the password.
(it wouldn't be the first time I've had to create additional website accounts because I couldn't remember the original account details, and there are many websites from the past that I can't revisit because I don't even remember their names)

Keeping track of computer passwords is also particularly important when dealing with multiple computers, or multiple OS's on virtual machines... resetting Windows passwords may be an annoyance, but it's not even an option for linux.

So this 'Key Vault' project was born out of necessity to keep track of the ever-growing number of logins and passwords.

It offers a private local list of logins and passwords, and even just website URL's, which can be always on hand, and which is not dependent on internet access or tied to any particular computer or device.

In addition, it also has option to send the selected password to the browser for copy 'n' paste convenience into a target window if wished, plus ability to embed the password within optional red herrings to cause misleading distractions (herrings aren't red).in packet sniffers To be honest the red herring facility was done more for the fun of it, but I'd rather have it than not.

The optional red herring prefix and/or suffix can either be pre-chosen characters, or can be left blank to automatically generate random characters. The lower and upper ascii character 'bounds' can be selected to tailor the range of random characters if wished, eg: chr$(48) to chr$(57) would only give random numbers.
The password and red herring colours can both be chosen to differentiate the wheat from the chaff, and the displayed browser text size may be adjusted - catering either for increased copy 'n' paste convenience, or for less visibility to nosy onlookers.

The first script is a modification of the  OLED Menu,  which allows navigation of a list using buttons or an optional rotary encoder. Selecting a list item (eg: a computer name, or website URL) displays the login name and password for the chosen item.
Optionally, selecting the displayed info again sends just the password (not the login) to the browser Output page where it can be selected and copied for pasting into a target window. Any further use of nav buttons clears the browser and returns the OLED display back to the list.
 
The script reads a "list.txt" file containing lines of items all terminated with a chr(10) EOL (end of line) character.
Each line can have up to 3 fields separated by spaces, which are read into 3 arrays.
The first array holds the list of names which are displayed to navigate through.
The 2nd and 3rd arrays are for the corresponding data entries.
Typically the lines would contain "Computer_name  User_name  Password" or "Website_URL  Login_ID  Password"
Selecting an entry from the list displays its corresponding 2nd and 3rd data fields, which could typically show the appropriate login ID and password for typing into a target window. Pressing a navigation button (or turning the rotary encoder) returns to the list display.

Optionally, selecting the displayed data again will send the 3rd (password) field to the browser Output page for convenient copy 'n' paste into a target page.The login ID field is deliberately not sent to the browser to avoid possibility of it and the password being captured together (most computers and previously visited websites remember and display the previous login ID anyway, which is usually already populated in the target).

Note:
When storing just 2 fields of interest such as "Website_name  URL", there would not be a 3rd field available to send to the browser for convenient copy 'n 'paste into the address bar, so the simple solution is just to insert a dummy 2nd field - which can be any non-space character, perhaps a brief descriptor) - eg: "Website_name  descriptor  URL".

You obviously need to create your own "list.txt" file containing your list of logons and passwords.
(it's easy to change the name from 'list.txt' to something else if preferred).
If the 'list.txt' is not found, the display will show "MISSING LIST.TXT" 

If you are not worried about your wifi browser activity being 'sniffed' you could create your "list.txt" file directly on the esp device from the Editor page in the browser. But electronics can eventually fail, so if you don't want to risk the possibility of losing your important info, you should back it up elsewhere anyway.
Therefore it may make more sense to create the list.txt file on the computer, then upload it to the device via the Toolkit File Manager, which should be quicker, and avoids opening the browser.
Either way, you will need to decide whether to leave the list.txt file on the computer (even as a backup) or delete it.
You can set an Annex password to improve device security - but now that we are on the subject of your personal data privacy and security, you are strongly advised to continue reading below.

OLED version
This first script is based on the OLED Menu so it can easily be launched as an App from the menu by changing the following lines in the OLED Menu script...

font=2            '1=smallest, 3=largest
file=1             '1=treat list of menu items as partial filenames to re-combine with path$
list$="vault,xbmview,ftpcopy,lock,i2scan,wifiscan"    'needs files=1

And don't forget to set nav=0 or nav=1 depending on whether using buttons or optional rotary encoder.
See the original OLED Menu project for info on how to change options such as the frame and line numbers etc.
 
This  demo video  shows the OLED Key Vault in use, or alternatively this LBRY version if preferred.
Notice the addition of a LIPO battery to provide convenient portability (the TTGO OLED module has a built-in LIPO charger).
The XBM startup Key logo can be downloaded from the bottom of this page... then upload to the device as "/img/vaultkey.xbm"

Basic:
'OLED Key Vault - by Electroguard - developed on Annex 1.40
'Displays list of computers and/or websites, select an item to display its corresponding login and password
'Optionally select the entry again to display the password in the browser Output page for copy'N'pasting into the target
'Then press anything to clear the password from the browser Output page and return to the list
'Navigate using buttons or rotatary encoder
font=1                   '1=smallest, 3=largest
nav=0                    '0=buttons, 1=rotary encoder    
wrap=1                  '0=stop at ends, 1=wraparound from last to first and vice versa
linenumbers=0       '1=include item numbers
tabbed=1               '1=reserve digit pad spaces for lower numbers
frame=1                 '1=draw box around menu contents
filename$="/list.txt" 'file containing your password list - items separated by spaces, lines terminated by chr(10) linefeed
redherring=3           '0=off, 1=prefix, 2=suffix, 3=prefix plus suffix (red herrings are unnecessary distraction characters 
redherring1$=""       'blank prefix will generate random characters, non-blank chars will be used 'as-is'
redherring2$=""       'blank suffix will generate random characters, non-blank chars will be used 'as-is'
'redherring1$="ME"   'non-blank prefix will be kept and used, else blank will generate random characters
'redherring2$="0123" 'non-blank suffix will be kept and used, else blank will generate random characters
hercol$="red"          'colour of red-herring prefix and suffix - select to contrast with your chosen password colour (pwdcol$)
pwdcol$="white"      'password colour displayed by browser
'pwdcol$="black"     'password colour displayed by browser
pwdsize$="7"          '1=small, 7=large
fromchr=63             'ascii start char for red herring range
tochr=122               'ascii end char for red herring range 
herrings=0
I2C.SETUP 5,4 
OLED.INIT 1,1
OLED.CLS
oled.image 0,0,"/img/key1.xbm"      'startup image
OLED.FONT 2
oled.print 6,6,"Key"
oled.print 64,49,"Vault"
if redherring>0 then gosub redherrings
pause 1500
pos=1
offset=0
if font=1 then w=10: h=10: t=1: cx=6: cy=6: cr=3: b=10: lines=6
if font=2 then w=12: h=15: t=1: cx=7: cy=8: cr=4: b=14: lines=4
if font=3 then w=24: h=21: t=0: cx=8: cy=12: cr=4: b=19: lines=3
OLED.FONT font 
OLED.COLOR 1
delim$=" "
eol$=chr$(10)
if file.exists(filename$)=1 then sites$=trim$(file.read$(filename$)) else sites$="MISSING"+eol$+"LIST.TXT"+eol$
sites$=replace$(sites$,"  "," ")       'gets rid of any double spaces
sites=word.count(sites$,eol$)        'counts how number of list items
digits=len(str$(sites))
dim site$(sites)
dim logon$(sites)
dim pwd$(sites)
for c=1 to sites
 entry$=word$(sites$,c,eol$)
 site$(c)=word$(entry$,1,delim$)
 logon$(c)=word$(entry$,2,delim$)
 pwd$(c)=word$(entry$,3,delim$)
next c
if sites < lines then lines = sites
branch$=""
debounce = 100         'debounce duration for buttons and rotary encoder contacts
longpress=100000   
if nav=0 then gosub buttons else if nav=1 then gosub rotary else wlog "invalid nav option": end
cls
gosub display
wait

display:
if branch$="html" then cls
branch$="display"
OLED.COLOR 1
OLED.CLS
for line = 1 to lines
 col=0
 if linenumbers=1 then
  n$=str$(line+offset)
  if tabbed=1 then
   if font=2 then n$=space$((digits-len(n$)))+n$ else n$=space$((digits-len(n$))*2)+n$  'workaround for half space font 2
  endif
  OLED.PRINT 12,t+(line*h)-h,n$+" "+site$(line+offset),col
 else
  OLED.PRINT 12,t+(line*h)-h, site$(line+offset),col
 endif
next line
op$=str$(line)+"  " + site$(pos)
oled.circle cx,t+(pos*h)-h+cy,cr,2
if frame=1 then oled.rect 0,t,128,64-t
return

rotary:  
rotaryA=13                            'Rotary encoder pulse B output pin
rotaryB=12                            'Rotary encoder pulse A output pin
mpin=14                                'Rotary encoder selector button pin
mstart=millis: mstop=millis:
pin.mode mpin, input, pullup
pin.mode rotaryA, input, pullup
pin.mode rotaryB, input, pullup
interrupt rotaryA, rotation
interrupt mpin, mpressed
return

rotation:
interrupt rotaryA, off
if pin(rotaryA)=0 then
 if pin(rotaryB)=0 then gosub moveup else gosub movedown
endif
pause debounce
interrupt rotaryA, rotation
return

buttons:
lstart=millis: lstop=millis: mstart=millis: mstop=millis: rstart=millis: rstop=millis
lpin=12: pin.mode lpin, input, pullup           'left button
mpin=14: pin.mode mpin, input, pullup       'middle button
rpin=13: pin.mode rpin, input, pullup           'right button
interrupt lpin, lpressed
interrupt mpin, mpressed
interrupt rpin, rpressed
return

moveup:
if branch$="display" then
 if pos>1 then pos=pos-1 else if offset>0 then offset=offset-1 ELSE if wrap=1 then pos=lines: offset=sites-lines
endif
gosub display
return

movedown:
if branch$="display" then
 if pos<lines then pos=pos+1 else if lines+offset<sites then offset=offset+1 ELSE if wrap=1 then pos=1: offset=0
endif
gosub display
return

selected:
if branch$="display" then
 branch$="selected"
 selected$=site$(pos+offset)
 oled.cls
 oled.print 10,10,selected$                              'show selected item for confirmation
 oled.print 10,30,logon$(pos+offset)                  'show selected item for confirmation
 oled.print 10,50,pwd$(pos+offset)                    'show selected item for confirmation
 return
endif
if branch$="selected" then
 branch$="html"
 oled.cls
 oled.print 10,10,"PWD shown in browser"          'show selected item for confirmation
 oled.print 10,30,"Press again to clear"
 oled.print 10,50,pwd$(pos+offset)                      'show selected item for confirmation
 msg$=|<font size="|+pwdsize$+|">|
 msg$=msg$+|<font color="|+hercol$+|">|+redherring1$+|</font>|
 msg$=msg$+|<font color="|+pwdcol$+|">|+pwd$(pos+offset)+|</font>|
 msg$=msg$+|<font color="|+hercol$+|">|+redherring2$+|</font>|
 html msg$
 return
endif
if branch$="html" then gosub display
return

lpressed:
interrupt lpin, off
pause debounce
if pin(lpin) = 0 then lstart = millis else lstop = millis
if lstop > lstart then
 if lstop - lstart < longpress then
  gosub moveup
 else
  oled.cls
  OLED.PRINT 10,10, "Long LEFT"
 endif
endif
interrupt lpin, lpressed
return

mpressed:
interrupt mpin, off
pause debounce
if pin(mpin) = 0 then mstart = millis else mstop = millis
if mstop > mstart then
 OLED.CLS
 if mstop - mstart < longpress then
  gosub selected
 else
  oled.cls
  OLED.PRINT 10,10, "Long MIDDLE"
 endif
endif
interrupt mpin, mpressed
return

rpressed:
interrupt rpin, off
pause debounce
if pin(rpin) = 0 then rstart = millis else rstop = millis
if rstop > rstart then
 if rstop - rstart < longpress then
  gosub movedown
 else
  oled.cls
  OLED.PRINT 10,10, "Long RIGHT"
 endif
endif
interrupt rpin, rpressed
return

redherrings:
if (redherring=1) or (redherring=3) then
 if redherring1$ = "" then
  herrings=rnd(10)
  for c=1 to herrings
   redherring1$=redherring1$ + chr$(rnd(tochr-fromchr)+fromchr)
  next c
 endif
endif
if (redherring=2) or (redherring=3) then
 if redherring2$ = "" then
  herrings=rnd(10)
  for c=1 to herrings
   redherring2$=redherring2$ + chr$(rnd(tochr-fromchr)+fromchr)
  next c
 endif
endif
return

'------------- End -------------



M5 Stack version
This version of the Key Vault takes advantage of the M5 Stack for convenient portability.
The M5 Stack (as it was originally called) uses an ESP32, so requires flashing with Annex32,
Here's a quick YouTube demo video of how it looks in use, or alternatively this LBRY version 

The JPG startup Key logo can be downloaded from the bottom of this page...
Upload the jpg image to the device as "/img/vaultkey.jpg" and it will be automatically displayed.
Note that all files are stored on micro-SD card, including the 'list.txt' of your logons and passwords.
This has some benefits when it comes to creating and maintaining the list, but it also has some security disadvantages - so you may wish to continue reading more about your privacy and security below.

The script is just an unoptimised mashup with unused remnants from other scripts, so it's not a work of art, only a means to an end.
 
Basic:
'M5stack Key Vault - by Electroguard - developed using Annex32 1.37 beta6
title$="M5 Key Vault"
filename$="/list.txt"  'file containing your password list - items separated by spaces, lines terminated by chr(10) linefeed
redherring=3            '0=off, 1=prefix, 2=suffix, 3=prefix plus suffix (red herrings are unnecessary distraction characters
redherring1$=""        'blank prefix will generate random characters, non-blank chars will be used 'as-is'
redherring2$=""        'blank suffix will generate random characters, non-blank chars will be used 'as-is'
'redherring1$="ME"   'non-blank prefix will be kept and used, else blank will generate random characters
'redherring2$="0123" 'non-blank suffix will be kept and used, else blank will generate random characters
hercol$="red"           'colour of red-herring prefix and suffix - select to contrast with your chosen password colour (pwdcol$)
pwdcol$="white"       'password colour displayed by browser
pwdcol$="black"       'password colour displayed by browser
pwdsize$="7"           '1=small, 7=large
fromchr=63               'ascii start char for red herring range
tochr=122                 'ascii end char for red herring range
if redherring>0 then gosub redherrings
herrings=0
delim$=" "
eol$=chr$(10)
if file.exists(filename$)=1 then sites$=trim$(file.read$(filename$)) else sites$="MISSING"+eol$+"LIST.TXT"+eol$
sites$=replace$(sites$,"  "," ")       'gets rid of any double spaces
sites=word.count(sites$,eol$)         'counts how many list entries
dim site$(sites)
dim logon$(sites)
dim pwd$(sites)
for c=1 to sites
 entry$=word$(sites$,c,eol$)
 site$(c)=word$(entry$,1,delim$)
 logon$(c)=word$(entry$,2,delim$)
 pwd$(c)=word$(entry$,3,delim$)
next c
red=tft.rgb(255,0,0):green=tft.rgb(0,255,0):blue=tft.rgb(0,0,255)
darkred=tft.rgb(150, 0, 0):darkgreen=tft.rgb(0,150,0):darkblue=tft.rgb(0,0,150)
cyan=tft.rgb(0,255,255):pink=tft.rgb(255,0,255):orange=tft.rgb(255,165,0):yellow=tft.rgb(255,255,5)
black=0:white=tft.rgb(255,255,255):lightgrey=tft.rgb(200,200,200):darkgrey=tft.rgb(128,128,128)
font=2
fill=black:
foreground=white:
background=fill
titlecolour=red:numberscolour=yellow:buttonscolour=black:buttonbackground=lightgrey
tft.init
tft.jpg "/img/vaultkey.jpg"
tft.text.size 4
tft.text.pos 14, 13
tft.text.col yellow,background
tft.print "Key"
tft.text.pos 190, 190
tft.print "Vault"
pause 2000
localfont=3
tft.text.size localfont
localfill=fill
localforeground=white
localbackground=localfill
pos = 1
offset = 0
margin=1
changed = 0
interrupt 39, lbutton
interrupt 38, mbutton
interrupt 37, rbutton
lstart=millis: lstop=millis: mstart=millis: mstop=millis: rstart=millis: rstop=millis
gosub showlist
wait


showlist:
cls
branch$="showlist"
head = 1 * localfont * 8
foot = 2 * localfont * 8
canvas = 240 - head - foot
lines = cint(canvas / (localfont * 8))
tft.fill fill 
tft.text.size 2
tft.text.pos 4, 3
tft.text.col titlecolour,background
tft.print title$
tft.text.size 2
tft.text.col numberscolour,background
data$ = str$(pos+offset) + " of " + str$(sites)
tft.text.pos 316-(len(data$) * 6 * localfont), 4
tft.print data$
if sites < lines then lines = sites
for c = 1 to lines
 tft.text.pos margin*localfont*6-4, (c*8*localfont)+4
 if c = pos then tft.text.col background,foreground else tft.text.col foreground,background
 tft.print site$(c+offset)
next c
footer
return

redherrings:
if (redherring=1) or (redherring=3) then
 if redherring1$ = "" then
  herrings=rnd(10)
  for c=1 to herrings
   redherring1$=redherring1$ + chr$(rnd(tochr-fromchr)+fromchr)
  next c
 endif
endif
if (redherring=2) or (redherring=3) then
 if redherring2$ = "" then
  herrings=rnd(10)
  for c=1 to herrings
   redherring2$=redherring2$ + chr$(rnd(tochr-fromchr)+fromchr)
  next c
 endif
endif
return

lbutton:
if (pin(39) = 0) then
 lstart = millis
else
 lstop = millis
endif
if lstop > lstart then
 select case branch$
 case "showlist"
  pos = pos - 1
  if pos < 1 then pos = 1:  offset = offset - 1
  if offset < 0 then pos = lines: offset = sites - lines
  gosub showlist
 case else
  gosub showlist
 end select
endif  
return

mbutton:
if (pin(38) = 0) then
 mstart = millis
else
 mstop = millis
endif
if mstop > mstart then
 select case branch$
 case "showlist"
  gosub selected     
 case "selected"
  gosub browser     
 case "browser"
  cls
  gosub showlist
 case else
  gosub showlist
 end select
endif  
return

rbutton:
if (pin(37) = 0) then
 rstart = millis
else
 rstop = millis
endif
if rstop > rstart then
 select case branch$
 case "showlist"
  pos = pos + 1
  if pos > sites then pos = 1: offset = 0
  if pos > lines then offset = offset+1: pos = lines
  if offset+lines > sites then offset = 0: pos=1
  gosub showlist
 case else
  gosub showlist
 end select
endif  
return

selected:
branch$="selected"
choice$ = site$(pos+offset)
tft.fill white
data$ = " "+site$(pos+offset)
tft.text.size 2
tft.text.col darkblue,white
tft.text.pos 0, 40
tft.print data$
data$ = " " + logon$(pos+offset)
tft.text.size 2
tft.text.col darkgreen,white
tft.text.pos 0, 110
tft.print data$
data$ = " " + pwd$(pos+offset)
tft.text.size 2
tft.text.col darkred,white
tft.text.pos 0, 180
tft.print data$
return

browser:
branch$="browser"
tft.text.size 4
tft.fill red
tft.text.col white,red
tft.text.pos 55,20
data$ = "Password"
tft.print data$
tft.text.size 3
tft.text.pos 50,60
tft.print "  shown in"
tft.text.pos 50,90
tft.text.size 4
tft.print " browser"         
tft.text.pos 10,140
tft.print "Press button"
tft.text.pos 50,180
tft.print " to clear"
msg$=| <font size="|+pwdsize$+|">|
msg$=msg$+|<font color="|+hercol$+|">|+redherring1$+|</font>|
msg$=msg$+|<font color="|+pwdcol$+|">|+pwd$(pos+offset)+|</font>|
msg$=msg$+|<font color="|+hercol$+|">|+redherring2$+|</font><br>|
html msg$
return

sub footer
xpos = 0
tft.text.col buttonscolour,buttonbackground
tft.text.size localfont
footer$ = " Ok "
tft.text.pos 163-(len(footer$)/2 * 6 * localfont), 232-(8 * localfont)
tft.print footer$
footer$ = " < "
Lbutton = 66 - (len(footer$)* 6 * localfont /2)
tft.text.pos Lbutton , 232-(8 * localfont)
tft.print footer$
footer$ = " > "
Rbutton = 253 - (len(footer$)* 6 * localfont /2)
tft.text.pos Rbutton , 232-(8 * localfont)
tft.print footer$
end sub

'---------- End -------------



Privacy and Security
The following is just common knowledge which is freely available on the internet for anyone who cares to look.

Any data shown in a browser, or which can be 'packet sniffed' during transmission (especially wifi), or stored on computer or other device with internet connection ... is vulnerable.

The internet provides a convenient path for others to invade your privacy and exploit your personal data at your expense.
If you think that doesn't apply to you, then you should pay particular attention, because you could be especially vulnerable.
You, and all internet users, are considered a valuable resource for global data harvesting by anyone who can get at you. This includes armies of individual hackers, organised crime, governments, huge global corporates beyond national controls ... the biggest invaders of privacy are actually the mega companies with household names like Microsoft and Google whose products are specifically designed to harvest personal user data and send it back via the users internet connection at the users expense.

By default Windows 10 logs all keystrokes and mouse activity, all browser activity, and much more - their data harvesting is called 'telemetry', but users can't complain because they've already agreed to the Microsoft terms and conditions in order to be users. And nobody complains on their behalf because everyone else involved benefits at the users expense. Government agencies not only have access to the harvested data, they are provided with secret backdoors into users systems, even though the very presence of such backdoors obviously makes users systems inherently more vulnerable to illegal attack and exploitation. An entire anti-malware industry exists because of criminal exploitation of software vulnerabilities - most of the vuilnerable software coming from Microsoft.

Most search engines track results to spot global trends and to return better tailored search results, but only a few who respect users privacy don't record personal data and past history results to target individual users with commercial or political bias.
Chrome reports everything back to Google, who has huge investment in AI to predict users choices so they can pre-empt and nudge users in their own preferred directions. Browsing habits are recorded, and search results are biased to include items Google prefers users to see and buy, bumping up offerings from paying 'commercial partners' even though they may be less relevant to users needs.

The contents of all Gmails are scanned, and kept by google even after users delete them from their mailbox.
Although such data harvesting is more invasive and prolific than any spyware, it is not legally considered an invasion of privacy because users have already agreed the terms and conditions, thereby also tacitly agreeing similar terms and conditions for other google products and services such as Facebook and YouTube. Google cross-references users data harvested from many products and services, including mobile phone data, to build profiles of users including their physical location and movements.

ISP's harvest and sell their users internet activities, and of course provide those details to government agencies.
 
As more and more opportunists jump on the bandwagon to harvest and sell users data, it's become normal and expected to be forced into agreeing terms and conditions before being allowed into to websites - failure to give up your privacy often means you must leave.

Data customers are willing to pay big money to influence such things as product purchase and public opinion... without the public even knowing or caring.

Data harvesters and their paying customers only consider users data a resource to make money from. Although the sale of harvested data should technically be limited to less personal 'metadata' for statistical analysis, that is known to not always be the case, but even if it is just the tip of a dangerous iceberg, there is nobody on iceberg watch anyway.
Even IF the legal data harvesters can be arguably considered ethical themselves, they have little control over how it is initially used after they sell your data, or how often it finds its way into other less scrupulous hands, or for what purposes it will eventually be used.

There is little effective oversight on omnipotent government agencies who are given access to the harvested data, and even less after being handed to other nations with different laws and ethics, participating in 5 eyes 9 eyes 14 eyes and other data sharing accords.

Illegal data harvesting is done on a massive scale by criminals who hack into servers to steal user data, thus avoiding need for users consent ... Yahoo has been hacked so many times resulting in data thefts to millions of users that it has become almost a regular crop harvest - and countless similar data thefts are such a frequent occurrence that they hardly make news anymore, let alone headlines.

Returning to the subject of your private logins and passwords contained in your 'list.txt' file... an awareness of data-harvesting offers you opportunity to improve your own privacy and security to lessen the risk of personal loss or disaster... but what you do about it - if anything - is entirely up to you.


Improving Data Privacy & Security
To avoid commercial or political harvesting of your browsing history and personal data you could use an independent browser such as Firefox.
To avoid your ISP harvesting your browsing history from its DNS servers... in Firefox go into Preferences, Network Settings, then tick "Enable DNS over HTTPS" - this will use alternative DNS server look-ups which cannot be tracked by your ISP.

To reduce manipulation by commercially biased search results, and stop your personal data and usage from being recorded, you could change the default search engine to DuckDuckGo, who say (quote)... "We don't store your personal information. Ever.
 Our privacy policy is simple: we don't collect or share any of your personal information
."
A couple of less familiar alternative search engines which also respect your privacy are Startpage and Qwant, but there are others.

If you are not happy about all your gmails being read and kept indefinitely, you might want to grab yourself a free secure Proton email account. Proton mail boxes are encrypted - so don't forget your password, because not even Proton can access your mailbox, therefore you would lose access to everything.
Proton to Proton emails are encrypted end to end, so they are secure from sender to recipient every step of the way.

TIP: If you had 2 Proton accounts you could securely send all your passwords to yourself from one account to the other and vice versa, then even if you got locked out of one account due to forgetting its password... you could easily get it back from the other account and regain access to all your encrypted mail again.

TIP: If you have a Proton account, you could securely create and maintain your 'list.txt' file of logins and passwords directly from within your encrypted mailbox, allowing you to remove all trace of it from your computer after uploading to your Annex Key Vault.

In addition, Proton offers (quote):
 "a free virtual private network (VPN).
  ProtonVPN enables you to:
    protect your privacy by hiding your IP address
    browse the web securely (even on public WiFi)
    visit blocked or censored websites
"
Don't expect it to be as fast as a paid VPN - but hey, it offers you free online privacy!

You can publish content on LBRY.TV to avoid registering with YouTube and having to accept its commercialism and restrictions.
LBRY says (quote):
"Almost every tech giant today is a centralized service that sells users' personal information and attention to advertisers. They spend a lot of money chasing their product (your personal information and time/attention), but at the end of the day, users (you) offer it up for free in exchange for access to the platform.
We think users should own their content (and their privacy) instead of handing it over to a corporate giant and their advertising buddies. If you think we're paranoid, there are dozens of examples of companies abusing users and acting against their interests. It's not paranoia if they're actually out to get you."
LiBRaRY uses a secure blockchain protocol which is completely free to use, and offers incentive for registered users by giving LBC as virtual currency rewards for eg: just watching Annex content. Using this link to join will earn some additional LBC as a first reward.  

You can reduce the personal profile which Google collates about you from cross-referencing your Facebook data with other social media accounts, email addresses, phone numbers,etc... by 'compartmentalising' your different accounts - ie: use different email addresses and contact information, and avoid including links from other social media platform in each other.
Firefox says (quote):
"if you still kinda like Facebook but don’t trust them, then try the Facebook Container extension by Firefox and make it harder for them to track you around the web"
There are sites which actually offer free fake ID's in many countries ... so although you may be bullied into agreeing terms and conditions or giving out contact information, you can avoid meekly handing over your true identity and giving away yourprivacy.
Likewise for sites that want your email address before allowing access... you can grab a free temporary '10 minute' email address to register for free downloads etc without being forever haunted by spam or pestered by sales blurb, 

If you want an inherently secure OS that has no need of anti-virus or anti-malware etc, look at linux.
No commitment is needed... most flavours of Linux offer 'Live Boot' from USB stick, allowing opportunity to gain familiarity without needing to burn any bridges. If and when you do start using Linux, you can still continue using Windows at the same time by using free virtualisation software (both Linux and Windows were being used at the same time to make this projects demo video).


The bottom line is that your privacy and security are your responsibility, and you should assume that everyone else is out to get what they can from you, so it is up to you to take whatever steps you feel necessary to stay safe and secure, The Key Vault offers a practical way to help you improve the security of your passwords, but it can only be as safe as you choose to make it.
 

  


Robin Baker,
Feb 12, 2020, 7:22 AM
v.1
Robin Baker,
Mar 10, 2020, 3:24 PM
v.1