···1111capability signatures in section 3.1.
121213131414-They keys are represented as follows:
1414+The keys are represented as follows:
15151616```rust
1717struct Key {
1818- key: [u8; MAX_KEY_SIZE],
1919- len: u64,
2020- scheme: SigningScheme,
1818+ buf: [u8; MAX_KEY_SIZE], /// Buffer storing the bytes of keys.
1919+ len: u64, /// The length of key in bytes.
2020+ scheme: SigningScheme, /// Enum marking what scheme the key is.
2121}
2222```
2323Since the underlying data is just a byte array, the keys themselves are
2424scheme-agnostic, enabling support for multiple cryptograhic schemes, as
2525-described in @twizzler. This also makes backward compatibility trivial when
2626-adding new signing schemes.The keys are stored inside of objects, allowing for
2727-persistent or volatile storage depending on object specification, and allows for
2828-keys themselves to be treated as any other object and have security policy
2929-applied to them.
2525+described in the Twizzler security paper @twizzler. The enum also makes backward
2626+compatibility trivial when adding new signing schemes. The keys are stored inside
2727+of objects, allowing for persistent or volatile storage depending on object
2828+specification, and allows for keys themselves to be treated as any other object
2929+and have security policy applied to them.
30303131== Abstraction
3232Currently we use the Elliptic Curve Digital Signature Algorithm (ECDSA) @ecdsa
···3535represented as bytes.
36363737An existing drawback for backward compatibility is the maximum size
3838-of the buffer we store the key in. Currently we set the maximum size as 256
3939-bytes, meaning if a future cryptographic signing scheme was to be created with
3838+of the buffer we store the key in. Currently the maximum size as 256
3939+bytes, meaning if a future cryptographic signing scheme was to be added with
4040a key size larger than 256 bytes, we would have to drop backwards
4141compatibility. While this can be prevented now by setting the maximum size to
4242something larger, it ends up being tradeoff between possible cryptographic schemes
···4545== Compartmentalization
4646// how they can be used to sign multiple objects (compartmentalization)
47474848-To create an object in twizzler, you specify the ID of a verifying key
4949-object so the kernel knows which key to use to verify any
5050-capabilities permitting access to the object. Since keys are represented as objects
5151-in twizzler, security policy applies on them as well, creating satisfying
5252-solutions in regards to key management.
4848+To create an object in Twizzler, you specify the ID of a verifying key object so
4949+the kernel knows which key to use to verify any capabilities permitting access
5050+to the object. Since keys are represented as objects, security policy applies on
5151+them as well, creating satisfying solutions in regards to key management.
53525454-Suppose for instance we have Alice on Twizzler, and all users on Twizzler have
5555-a "user-root" keypair that allows for them to create an arbitrary number of
5353+Suppose for instance we have Alice on Twizzler, and all users have
5454+a "user-root" keypair that allows them to create an arbitrary number of
5655objects. Also suppose that access to this user-root keypair is protected by
5757-some login program, where only alice can log in. This means that Alice
5656+some login program, where only Alice can log in. This means that Alice
5857can create new keypair objects from her user-root keypair. Since all
5958*her* new keypairs originate from *her* original user-root keypair, only *she* can
6059access the keys required to create new signatures allowing permissions into