Hello! My name is Drew DeVault and I am the designer Himitsu key store system,
And I'd like to present it to you today.
What you see in front of you is a GTK+ frontend for the Himitsu key store, which is called keyring
And is written by Martijn Braam.
On the left here, you see a series of keys which is stored in the key store,
These are web passwords, this one for example is for alpinelinux.org,
And it includes the protocol as web, the hostname the username, and the password which is currently hidden.
The core key store implementation does not understand the semantics of any particular kind of secret.
So a web password is defined by convention.
So the key store stores arbitrary key value pairs,
And there are conventions associated with the web protocol.
Specifically for this protocol, each of the keys are form fields,
And the values are the values that should be placed into those forms to complete filling out a login form.
Here the username field is called user and the password field is called password,
But there are other examples, for example
Codeberg calls the username form field "user_name", and thus it has a different key value.
But the actual semantics structure of these keys is beyond the concern of Himitsu,
Which allows us to implement more kinds of keys to be stored than simply passwords.
For example, I also have in my key store an XMPP credential, IRC credentials, Matrix credentials,
SMTP credentials, this one is interesting because we see different conventions for how these are stored.
This includes the port number to connect to, and the TLS method in use, in addition to all of the the other similar keys.
But I'll expand a little more on these other kinds of keys later.
For now I'd like to focus on the web keys.
I have here one for example.org, which I can view by pressing "Decrypt".
And I'm given this prompt to consent the disclosure of my secret information.
And if I agree, it shows the password here.
I can also show you a different front end for accessing Himitsu, which is our Firefox plugin.
So we have an add-on here which adds a button.
When I click this button, it looks up and displays all of the Himitsu entries which match this hostname.
If I click autofill,
Again, I have to give permission, and if I agree, it fills in the form, and I am able to login.
The difference of these two frontends, there's a frontend that comes with the Himitsu distribution called hiq.
This is a command line program which is used to facilitate programmable access to the key store.
Just running hiq displays all the keys, but I could be more specific.
I can for example display only web keys, or I could display web keys for the host=example.org
You'll notice here that the password field is marked with an exclamation mark, which indicates that it's secret
And the value is not shown.
If I want to display the value, I must give permission by using the d flag, and agreeing to that disclosure.
And the password will be shown.
We also have a feature in hiq, which is the f flag, which allows me to display a specific key only.
This is useful for piping in shell scripts.
There additionally more sophisticated queries that you can use,
So I can say for example that I would like to view keys where proto=web and host=example.org
Which also conforms to some desired characteristics such as
Having username field with the password field, which is secret,
And it will return all of the results which match this query.
I can also add an optional comment field, which is not present but still causes key to be matched.
And I can perhaps give a few more examples if I don't specify that hostname I want, and you can see a few other keys
which match this shape.
And other parts in we have is the SSH protocol.
So again, Himitsu store is much more than web passwords.
So if I query for proto=ssh, I will see that a SSH key in the store.
And the exclamation part- mark here indicates that the secret key is secret.
Public key is base64 encoded, we also have the the SSH key type
And a comment, which comes from the public key file.
I'm going to delete this key to show you how the system works.
So deletion is a destructive operation which requires consent again, so I will agree to delete this key before moving on.
And then I'll reimport my key using the hissh-import command, which I'll pass through the standard input,
Path to my SSH key...
Decrypt that key,
And it'll be added to the key store again.
Now that the key is in the key store,
I can use the Himitsu SSH agent to facilitate the use of this key, with SSH applications.
But for example, if I run ssh-add -l, you'll see that the key appears in this key store,
And if I do an actual SSH command, I will be prompted to consent to the use of my secret key.
And when I agree, the agent will facilitate the login.
I can also use the hissh-export command
Which will export any public keys which are found in the key store,
So that you can re-import them into OpenSSH or add them to authorized_key file or something similar.
It also supports a flag to export the SSH private key as well.
The protocol which is used by the Himitsu daemon is very simple and straightforward,
It's a line oriented text protocol, which works over a Unix socket.
And in fact, we can demonstrate it by using netcat.
So I can again query the keys with proto=web, I can decrypt a key with the -d flag,
Which prompts me to consent, and when I agree, it displays the key here,
And all of the other operations are equally simple.
This uh, very straightforward protocol makes it very easy to build new integrations with frontends
like the SSH integration, or the Firefox add-on,
And my hope is that this will facilitate the development of robust ecosystem of programs
which interact with the Himitsu key store, thanks to this very simple protocol.
We also have a protocol for the prompter itself, so if I run hiq -d host=example.org,
You see this GTK application pop up using the Wayland layer shell protocol.
And this application itself is also pluggable,
and is distributed separately from the core Himitsu application.
It can be replaced with any implementation,
You can replace it with something that uses QT instead of GTK+,
You can replace it with something that prompts for permission on a TTY instead of using a GUI,
You can replace them with something that integrates with Twilio to text you
And ask you to confirm on your phone,
Or any kind of use case you can imagine, through a simple standardized protocol.
[The] protocol is documented along with all of the other features, in an extensive set man pages.
The Himitsu-prompter man page
Covers the protocol for the prompter to facilitate the prompter implementations,
And the Himitsu-ipc man page covers the unix socket protocol that could be used
to access the key store.
We also have more man pages for the daemon, and introducing the system as a whole,
Or talking about hiq or working with the SSH integration and so on.
But this is the Himitsu system, hope you find it interesting, and I hope that you're able to build interesting things with it,
Thanks for your attention, and be sure to check it out.
(Subtitles provided by jacksonchen666)