In both East and West, in older times, the practise of using special stamps was used as a part of authenticating the source of a document.
Asia
These were commonly carved stone blocks called 'chop seals' and there is a whole bunch of associated things with it, the ink blocks, and so on. They were usually red ink and anyone who is familiar with Asian ink-brush artwork will know about these little red squares that appear in the corner where in the West you see scrawly signatures made with brushes:
Europe
Much more common was the use of Signet rings, and usually the most senior member of a monarchy possessed a special ring that contained a surface that was intended to be used to imprint onto a block of wax, which would be used to mark certifications and most often, seal letters so not only was there authenticity but tamper resistance.
Cryptography has all of these same concepts, but you don't have to be royalty to use them.
So, to explain what this is, it's similar in principle, to Trezor and Ledger devices. Separating the storage of the secret and generating signatures happens in a separate process.
But going further than this, signet
will allow you to install on a small, primitive and maybe old device that has been segregated for this purpose, and it will allow you to sign transactions without storing the secret keys on the device that you use to compose and publish your posts, but without physically plugging it in, either. You will just need both devices to be connected to the same local area network.
Ultimately it would be preferable if a security hardened device like the hardware signature/key management devices, and if it were able to operate not just over wifi and USB connection, but also bluetooth, or maybe even, going a little further, it has a simple display that renders a QR code bearing the signature and you show this to your laptop or phone's front screen camera and voila, super secure, no network, just photons.
One of the founders of Blurt, my friend and fierce ally @jacobgadikian also is working on other projects related to but in parallel to Blurt, aiming at the production of 100% open source, auditable hardware devices. For sure, such high security cryptographic devices are on the agenda, as they are small and simple.
You might be able to imagine a device about the size of a physical signet ring, think, a more extravagant one, that is big enough to show 9 characters for you to enter an unlock code, and then it will respond to requests for signatures by displaying a QR code that contains your signature on the transaction or document, and a client app library on the laptop or mobile device that you can then show this signature block to it and voila, transaction authorised, and very difficult for anyone to intercept anything involved.
Something like a square chip, about 3x3 centimetres, or a little over an inch square, and on both sides are simple (maybe monochrome) displays, one of them having a touch interface. A common problem with keypad systems is they show always the same 1 2 3 4 5 6 7 8 9 digits in the same position. By making that touch-enabled side also a display, it would be possible to scramble the positions each time the keypad is displayed, ensuring that no physical trace is repeating the same pattern and anyone looking at its fingerprint marks won't be able to know to what number each press relates.
It only listens to the network, and in response to properly formed messages, it asks for an unlock and then shows the signature on it's face. Another interaction allows you to make it show the public key, which you can use to enable someone to send an encrypted message to you.
Sooo....
Well, for the time being, I am just writing a very simple interface that manages storing the keys, listens to multiple network connection methods, including unix sockets and named pipes for installations on the same machine (as is common with signing apps on the Graphene chains) but I want to specifically add UDP multicast, as this allows you zero configuration connectivity, the device only has to be on the same local area network, and it listens out for messages to the port number designated for this purpose.
Once it receives them, the messages contain a return address to send the signature back to, but ultimately later on, this can be removed and the signature can be captured by a camera and no easy way to capture this nor penetrate the device are provided to attackers.
To start with, I am covering the case of a signing agent on the same machine, connected by named pipes or unix sockets (which are very closely related) or if the signer is installed on a separate device, that it listens to a multicast address and if the request contains the matching username or address, it can prompt the user to unlock and sign the transaction for you.
Git Repository
https://gitlab.com/stalker.loki/signet
This is where you can find the project. At some point after I get it working, I will probably need some help from iOS and Android devs who can assist with deploying the native versions for those platforms. Building for linux and windows using Gio (https://gioui.org) can be done from either linux or windows. The Apple platforms require xcode
and android requires the Android SDK installation.
I have already seen deployment via xcode to mac and iOS some months ago, so it's not difficult, and for me, the most important thing is that it's pure Go, and the library is small and efficient, and does not force you to use the prescribed data storage container formats, Gio is much like game GUI systems, but targeted at desktop and mobile user interfaces. It is about 18 months since the project began, and it's already quite capable.
This is a nice, simple app, and leverages my experience working with UDP/multicast/pipe/socket libraries and elliptic curve cryptography.
It is a key philosophy of Blurt development processes, that we aim for small targets, and deliver quickly, and I think this project fits that perfectly, and long term, such a framework will greatly improve the user experience of crypto distributed systems.
genius at work
Pretty cool☺