diff options
-rw-r--r-- | README.md | 84 |
1 files changed, 52 insertions, 32 deletions
@@ -1,36 +1,45 @@ -# System Transparency Front-End (STFE) -STFE is a [Trillian](https://transparency.dev/#trillian) -[personality](https://github.com/google/trillian/blob/master/docs/Personalities.md) -that allows you to log signed checksums. What a checksum represents is up to the -submitter. For example, it could be a Firefox update, a Debian package, or a -document. You can use STFE to: +# Signature Transparency Logging +Signature Transparency Logging allows you to add signed checksums into an +append-only and tamper-evident log. What a checksum represents is up to the +submitter. For example, it could be a cryptographic hash of a Firefox update, a +Debian package, or a document. You can use Signature Transparency Logging to: 1. Discover which signatures were produced by what secret signing keys. 2. Be sure that everyone observes the same signed checksums. -**It works as follows.** +We abbreviate Signature Transparency Logging as _siglog_. + +## How it works Suppose that you develop software and publish binaries. You sign those binaries -and make them available to users in a database. You are committed to distribute -the same non-malicious binaries to every user. That is an easy claim to make. -However, word is cheap and sometimes things go wrong. How would you even know -if your secret signing key or build environment got compromised? A few select -users might receive maliciously signed binaries that include back-doors. -This is where STFE can help by adding transparency. +and make them available to users in a package repository. You are committed to +distribute the same signed binaries to every user. That is an easy claim to +make. However, word is cheap and sometimes things go wrong. How would you even +know if your signing infrastructure got compromised? A few select users might +already receive maliciously signed binaries that include a backdoor. This is +where siglog can help by adding transparency in the future. + +For each binary you can log a signed checksum that corresponds to that binary. +If a signed checksum appears in the log that you did not expect: excellent, now +you know that your signing infrastructure was compromised at some point. Anyone +can also detect if a logged checksum is unaccounted for in your package +repository by inspecting the log. In other words, the claim that the same +binaries are published for everyone can be _verified_. -For each binary you can log a signed checksum. If a signed checksum appears in -the log that you did not expect: excellent, now you know that your secret -signing key or build environment was compromised at some point. Anyone can also -detect if a logged checksum is unaccounted for in your database by inspecting -the log. In other words, the claim that the same non-malicious binaries are -published for everyone can be _verified_. +Adding signed checksums into a log is already an improvement without any +end-user enforcement. Honest mistakes can be detected. However, end-users need +to enforce public logging to get the most out of siglog. This means that a +binary in the above example would be rejected unless a corresponding signed +checksum is logged. -## Design -We had several design considerations in mind while developing STFE. A short +## Design considerations +We had several design considerations in mind while developing siglog. A short preview is listed below. Please refer to our [design document](https://github.com/system-transparency/stfe/blob/main/doc/design.md) and [API specification](https://github.com/system-transparency/stfe/blob/main/doc/api.md) for additional details. Feedback is welcomed and encouraged! -- **Preserved data flows:** an end-user can enforce transparency logging without -making additional outbound connections. The data publisher should distribute -proofs of public logging as part of their database. +- **Preserved data flows:** an end-user can enforce transparent logging without +making additional outbound network connections. Proofs of public logging should +be provided using the same distribution mechanism as the data. In the above +example the software publisher would put these proofs into their package +repository. - **Sharding to simplify log life cycles:** starting to operate a log is easier than closing it down in a reliable way. We have a predefined sharding interval that determines the time during which the log will be active. @@ -45,16 +54,21 @@ protocol directly into the log. It is based on witness cosigning. - **No cryptographic agility**: the only supported signature scheme is Ed25519. The only supported hash function is SHA256. Not having any cryptographic agility makes the protocol simpler and more secure. -- **Few simple (de)serialization parsers:** complex (de)serialization -parsers would increase our attack surface and make the system more difficult -to use in constrained environments. End-users need a small subset of Trunnel to -work with signed and logged data. Log clients additionally need to parse ASCII +- **Few and simple (de)serialization parsers:** complex (de)serialization +parsers increase attack surfaces and make the system more difficult to use in +constrained environments. End-users need a small subset of Trunnel to work with +signed and logged data. The log's network clients also need to parse ASCII key-value pairs. -## Public Prototype -We have a public prototype that is up and running with zero promises of uptime, -stability, etc. You can talk to the log by passing ASCII-encoded key-value -pairs. For example, go ahead and fetch the latest tree head: +## Public prototype +We implemented siglog as a [Trillian](https://transparency.dev/#trillian) +[personality](https://github.com/google/trillian/blob/master/docs/Personalities.md). +A public prototype is up and running with zero promises of uptime, stability, +etc. The log's base URL is `http://tlog-poc.system-transparency.org:4780/st/v0`. +The log's public verification key is `bc9308dab23781b8a13d59a9e67bc1b8c1585550e72956525a20e479b1f74404`. + +You can talk to the log by passing ASCII key-value pairs. For example, +fetch a tree head and a log entry: ``` $ curl http://tlog-poc.system-transparency.org:4780/st/v0/get-tree-head-latest timestamp=1623053394 @@ -62,6 +76,12 @@ tree_size=1 root_hash=f337c7045b3233a921acc64688b729816a10f95f8be00910418aaa3c71245d5d signature=50e88b935f6010dedb61314685371d16bf180be99bbd3463a0b6934be78c11ebf8cc81688e7d11b0dc593f2ea0453f6be8ed60abb825b5a08535a68cc007e20e key_hash=2c27a6bafcbe210753c64666ca108025c68f28ded8933ebb2c4ef0987d7a6302 +$ +$ printf "start_size=0\nend_size=0\n" | curl --data-binary @- http://tlog-poc.system-transparency.org:4780/st/v0/get-leaves +shard_hint=0 +checksum=0000000000000000000000000000000000000000000000000000000000000000 +signature_over_message=0e0424c7288dc8ebec6b2ebd45e14e7d7f86dd7b0abc03861976a1c0ad8ca6120d4efd58aeab167e5e84fcffd0fab5861ceae85dec7f4e244e7465e41c5d5207 +key_hash=9d6c91319b27ff58043ff6e6e654438a4ca15ee11dd2780b63211058b274f1f6 ``` We are currently working on tooling that makes it easier to interact with the |