:orphan:
Cryptosign Authentication
=========================
WAMP-Cryptosign is a WAMP-level authentication mechanism which uses
Curve25519-based cryptography - Ed25519 private signing keys.
It allows authentication from both sides (client-router and
router-client) to prevent MITM attacks.
Like TLS, it is a public-key authentication mechanism.
Unlike TLS, it does not rely on the broken CA infrastructure.
Additionally, the curve used was generated outside of the NIST standards
process, so the likelihood of a nation-state backdoor is much lower.
(The specification of this curve for use in TLS is currently underway.)
And, last but not least, high-quality and performant implementations of
the curve are available with the `NaCl
libraries `__.
Note: Cryptosign is currently available when using Autobahn\|Python
and Autobahn\|JS. Other WAMP client libraries may have implemented
it, so check with the respective documentation.
Note: Cryptosign is currently still under active development, so
some features may be missing or not be stable yet.
We provide examples of using Cryptosign for `static
configuration `__.
Cryptosign Configuration
------------------------
Inside of a transport's `"auth"` key a dict contains options for
Cryptosign configuration. You must specify `"type"` as either
`"static"` or `"dynamic"`.
Using `"static"` configuration, you add a `"principals"` dict that
maps usernames to details:
+-----------------+-----------------------------------------------------------------------------------------------------------------------+
| Option | Description |
+=================+=======================================================================================================================+
| realm | the realm to assign this user (required) |
+-----------------+-----------------------------------------------------------------------------------------------------------------------+
| role | the role to assign this user (required) |
+-----------------+-----------------------------------------------------------------------------------------------------------------------+
| authorized_keys | a list of strings of valid public-keys for this user (each key encoded in ASCII hex) |
+-----------------+-----------------------------------------------------------------------------------------------------------------------+
Here is an example configuration using static credentials taken from `this fully-worked example `_::
...
"auth": {
"cryptosign": {
"type": "static",
"principals": {
"client01@example.com": {
"realm": "devices",
"role": "device",
"authorized_keys": [
"545efb0a2192db8d43f118e9bf9aee081466e1ef36c708b96ee6f62dddad9122"
]
},
"client02@example.com": {
"realm": "devices",
"role": "device",
"authorized_keys": [
"9c194391af3bf566fc11a619e8df200ba02efb35b91bdd98b424f20f4163875e",
"585df51991780ee8dce4766324058a04ecae429dffd786ee80839c9467468c28"
]
}
}
}
}
...