···6677// talk about the standard unix abstractions
8899-In mainstream operating systems, a
99+In mainstream operating systems, an
1010omnicient and all-powerful kernel enforces security policy at runtime.
1111// what am i trying to say here.
1212-It acts as the bodyguard, holding all i/o and data protected unless the
1212+It acts as the bodyguard, holding all I/O and data hostage unless the
1313requesting party has the authorization to access some resource. This tight
1414coupling of security policy and access mechanisms works well since any access
1515must be done through the kernel, so why not perform security checks
1616alongside accesses? However,
1717the enforcement of security policy starts getting complicated when we try
1818-to separate the access mechanisms from the kernel. This problem arises
1919-in a certain class of operating systems.
1818+to separate the access mechanisms from the kernel.
1919+2020+//TODO: explain why this happens?
2121+This problem arises in a certain class of operating systems.
20222123== Data-Centric Operating Systems
22242525+//TODO: daniel feedback
2626+// I would add a paragraph motivating the data-centric approach
2727+// like why would i want the kernel out of the way?
2828+2329Data-centric operating systems are defined by two principles @twizzler:
24302531 + They provide direct, kernel-free, access to data.
26322733 + They have a notion of pointers that are tied to the data they represent.
28343535+// then this paragrapch can focus on why removing the kernel
3636+// from the access path is a security probjem
3737+// maybe worth discussing how the access is tied to the mmu as well.
3838+//
2939Mainstream operating systems fail to classify as data-centric operating
3040systems, as they rely on the kernel for all data access, and use virtualized
3141pointers per process to represent underlying data. The benefit of this "class"
···3747== Capability Based Security Systems
384839494040-// describe capability based security systems
4141-//
4242-// how they are different from earlier thingies
43504451Capability-based security systems have a rich history in research, and offer
4552an alternative approach to security, in opposition to the Access Control Lists of prevalent OS's @linux_security.
···4956of the kernel's involvement in the creation and management of security policy.
5057In a well-designed system, as we see in @twizsec and described later, this allows
5158users to completely create and manage security policy while the kernel is left to enforce
5252-it. This paradigm permits kernel-free access of data, while also guaranteeing
5353-security.
5959+it.
6060+6161+//TODO: how? (via mmu + pagetable mappings programmed via the kernel) (which is still kernel-free for most data accesses)
6262+This paradigm permits kernel-free access of data, while also guaranteeing
6363+security.
6464+6565+//TODO: maybe add a bit about "unforgeable" tokens, cryptographic operations, why they are needed
6666+6767+546855695670···6478Code can be found in this
6579#link("https://github.com/twizzler-operating-system/twizzler/issues/268")[Github
6680tracking issue].
8181+8282+//TODO: list pr's with a short summary of what each one accomplishes?
67836884#load-bib(read("refs.bib"))
+15-6
2-keypair.typ
···44#mol-chapter("Key Pairs")
5566// what are keypair objects ?
77+// TODO: fix this fuckin sentence
78Key pairs in Twizzler are representation of the cryptographic signing
88-schemes used to create a signed capability, as discussed in 3.1. We design
99+schemes used to create a signed capability, as discussed in 3.1.
1010+1111+1212+We design
913the keypair objects to be agnostic towards the underlying scheme to allow for
1014multiple schemes, as described in @twizzler. This also helps with backwards
1115compatibilty when adding new, more secure schemes, in the future. The keys
···1317storage depending on object specification, and allows for keys themselves to
1418be treated as any other object and have security policy applied to them. This
1519allows for powerful primitives and rich expressiveness for describing secruity
2020+//NOTE: elaborate or point forward to later
1621policy, while also being intuitive enough to construct basic policy easily.
17221823···2126The `SigningKey` struct is a fixed length byte array with a length field
2227and an enum specifying what algorithm that key should be interpreted as.
2328Currently we use the Elliptic Curve Digital Signature Algorithm (ECDSA) @ecdsa
2929+//TODO: why are we talkin about the simplistic data representation without
3030+// actually explaining the representation. maybe having a diagram would be useful?
2431to sign capabilities and verify them, but the simplistic data representation
2525-allows for any arbitrary alogrithm to be used as long as the key can be
3232+allows for any arbitrary algorithm to be used as long as the key can be
2633represented as bytes.
27342835Additionally this specification allows for backward compatibility, allowing
···3138of the buffer we store the key in. Currently we set the maximum size as 256
3239bytes, meaning if a future cryptographic signing scheme was to be created with
3340a key size larger than 256 bytes, we would have to drop backwards
3434-compatibility. Sure this can be prevented now by setting the maximum size to
3535-something larger, but thats a tradeoff between possible cryptographic schemes
4141+compatibility. While this can be prevented now by setting the maximum size to
4242+something larger, it ends up being tradeoff between possible cryptographic schemes
3643vs the real on-disk cost of larger buffers.
37443845== Compartmentalization
3946// how they can be used to sign multiple objects (compartmentalization)
40474141-To create an object in twizzler, you specify the id of a verifying key
4848+To create an object in twizzler, you specify the ID of a verifying key
4249object so the kernel knows which key to use to verify any
4350capabilities permitting access to the object. Since keys are represented as objects
4451in twizzler, security policy applies on them as well, creating satisfying
4552solutions in regards to key management.
46534747-Suppose for instance we have Alice on Twizzler, and all users on twizzler have
5454+Suppose for instance we have Alice on Twizzler, and all users on Twizzler have
4855a "user-root" keypair that allows for them to create an arbitrary number of
4956objects. Also suppose that access to this user-root keypair is protected by
5057some login program, where only alice can log in. This means that Alice
···5360access the keys required to create new signatures allowing permissions into
5461*her* objects. It forms an elegant solution for key management without
5562the involvement of the kernel.
6363+6464+// nice, we should talk more about this
566557665867#load-bib(read("refs.bib"))
thesis.pdf
This is a binary file and will not be displayed.
+10-2
thesis.typ
···2323 degree: "Computer Engineering B.S."
2424)
25252626+// DANIEL feedback
2727+// overall great start, I'd extend the intro a little bit, its a litte sparse
2828+// and could use a few more things, same thing with future work and conclusion.
2929+//
3030+// run a spell check
3131+//
3232+// more feedback throughout, feel free to take or ignore
3333+2634#mol-abstract[
2735 Traditional operating systems permit data access through the kernel, applying
2836 security policy as a part of that pipeline. The Twizzler operating system
2937 flips that relationship on its head, focusing on an approach where data
3030- access is a first-class citizen, getting rid of the kernel as a middleman. With
3131- this data-centric approach, it requires us to rethink how security policy
3838+ access is a first-class citizen, getting rid of the kernel as a middleman.
3939+ This data-centric approach requires us to rethink how security policy
3240 interacts with users and the kernel. In this thesis, I present the design and
3341 implementation of core security primitives in Twizzler. Then I evaluate the
3442 security model with a basic and advanced scenario, as well as microbenchmarks