···46464747== Our Contributions
48484949+In this thesis, I detail the fundamentals of security in the Twizzler
5050+operating system, and discuss how I implement and refine some of the high
5151+level ideas described in @twizzler and an early draft of a Twizzler security
5252+paper. Additionally we evaluate these systems inside kernel and user space,
5353+with comparsions to micro-benchmarks done with an older version of twizzler.
5454+4955// describe the twizzler opensource project
5056//
5157// my contribution of the existing plan for a security system
+42-2
2-keypair.typ
···44#mol-chapter("Key Pairs")
5566// what are keypair objects ?
77+Key pairs are the Signing and Verifying keys used to create Capabilities.
88+We design the keypair objects to be agnostic towards what cryptographic
99+schemes are underneath, allowing for the underlying algorithm to be changed
1010+@twizzler. The keys themselves are stored inside of objects, allowing for
1111+persistent or volatile storage depending on object specification. It also
1212+allows for the keys to fall under the security system, meaning that signing
1313+keys can be protected by a different keypair, forming this chain of trust.
1414+1515+1616+717818// how are they represented in twizzler ?
9191020== Abstraction
11211212-// the abstraction layer to represent multiple signing schemes
2222+The `SigningKey` struct is a fixed length byte array with a length field
2323+and an enum specifying what algorithm that key should be interpreted as.
2424+Currently we use the Elliptic Curve Digital Signature Algorithm (ECDSA)
2525+@ecdsa to sign capabilities and verify them, but the simplistic dat
2626+arepresentation allows for any arbitrary alogrithm to be used as long as
2727+the key can be represented as bytes.
13282929+Additionally this specification allows
3030+for backward compatibility, allowing for an outdated signing scheme to be used in
3131+support of older programs / files. An existing drawback for backward compatibility is the
3232+maximum size of the buffer we store the key in. Currently we set the maximum size as 256 bytes,
3333+meaning if a future cryptographic signing scheme was to be found with a private key size
3434+larger than 256 bytes, we would have to drop backwards compatibility. Sure this
3535+can be prevented by setting the maximum size to something larger, but that a tradeoff
3636+between possible cryptographic schemes vs the real on-disk cost of larger buffers.
14371538== Compartmentalization
1639// how they can be used to sign multiple objects (compartmentalization)
1717-//
18404141+To create an object in twizzler, you specify the id of a verifying key
4242+object so the kernel knows which key to use to verify any
4343+capabilities permitting access to the object. You can also specify
4444+default protections for an object or create a capability with the signing
4545+key and any desired permissions.
19464747+The neat thing about this design is that you can use a single keypair in-order to use
4848+any arbitrary amount of objects. This results in the possibility of finegrained
4949+access control to semantic groupings of objects.
5050+5151+An example could be a colletion of objects holding files for a class, and grouping all of them
5252+under the same key.
205321545555+// what the fuck am i trying to say
5656+Now restricting access to that one key prevents the usage of that key to create
5757+any new objects?
5858+5959+// all it does is make creation easier, since you only need one pair, it doesnt
6060+// restrict capabilities or whatever. It's just a benefit since we dont have to worry
6161+// about managing a keypair for every single object
22622363#load-bib(read("refs.bib"))
+39-2
3-cap.typ
···445566// define a capability
77+Capabilities are the atomic unit of security in Twizzler, acting as tokens of
88+protections granted to a process, allowing it to access some object in the ways
99+it describes. A Capability is built up of the following fields.
71088-// the atomic unit of security
1111+1212+```
1313+struct Cap {
1414+ target: ObjID, // Object ID this capability grants access to
1515+ accessor: ObjID, // Security context ID in which this capability resides
1616+ prots: Protections, // Specific access rights this capability grants
1717+ flags: CapFlags, // Cryptographic configuration for capability validation
1818+ gates: Gates, // Additional constraints on when this capability can be used
1919+ revocation: Revoc, // Specifies when this capability is invalid, i.e. expiration.
2020+ sig: Signature, // The signature inside the capability
2121+}
2222+```
2323+2424+//
2525+== Signature
2626+The signature inside is what determines the validity of this capability. The
2727+only possible signer of some capability is who ever has permissions to the
2828+signing key object, or the kernel. In this way, if the signer decides to
2929+make the signing key private to them, no other entity can administer this
3030+signature for this capability. The signature is built up of a array with
3131+a maximum length and a enum representing what type of cryptographic scheme
3232+was used to create it; quite similar to the keys mentioned previously.
3333+The message being signed to form the signature is the bytes of each of the
3434+fields inside the capability being hashed. There is support for multiple
3535+hashing algorithms as described in 3.1.
3636+3737+3838+// what do i want to talk about regarding signatures?
9391040== Gates
11411242== Flags
4343+Currently flags in capabilities are used to specify which hashing algorithm to use in order
4444+to form a message to be signed. We allow for multiple algorithms to be used in order to
4545+allow for backwards capability when newer, more efficient hashing algorithms are created.
13461414-== Signature
4747+There is also plenty of space left in the bitmap, allowing for future work to develop more
4848+expressive ways of using capabilities, such as planned future work to implement information
4949+flow control into the twizzler security system.
5050+5151+15521653#load-bib(read("refs.bib"))
+49-16
refs.bib
···11@inproceedings{twizzler,
22- author = {Daniel Bittman and Peter Alvaro and Pankaj Mehra and Darrell D. E.
33- Long and Ethan L. Miller},
44- title = {Twizzler: a {Data-Centric} {OS} for {Non-Volatile} Memory},
55- booktitle = {2020 USENIX Annual Technical Conference (USENIX ATC 20)},
66- year = {2020},
77- isbn = {978-1-939133-14-4},
88- pages = {65--80},
99- url = {https://www.usenix.org/conference/atc20/presentation/bittman},
1010- publisher = {USENIX Association},
1111- month = jul,
22+ author = {Daniel Bittman and Peter Alvaro and Pankaj Mehra and Darrell D. E.
33+ Long and Ethan L. Miller},
44+ title = {Twizzler: a {Data-Centric} {OS} for {Non-Volatile} Memory},
55+ booktitle = {2020 USENIX Annual Technical Conference (USENIX ATC 20)},
66+ year = {2020},
77+ isbn = {978-1-939133-14-4},
88+ pages = {65--80},
99+ url = {https://www.usenix.org/conference/atc20/presentation/bittman},
1010+ publisher = {USENIX Association},
1111+ month = jul,
1212}
13131414@inproceedings{linux_security,
1515- author = {Zhai, Gaoshou and Li, Yaodong},
1616- year = {2009},
1717- month = {01},
1818- pages = {58 - 61},
1919- title = {Analysis and Study of Security Mechanisms inside Linux Kernel},
2020- doi = {10.1109/SecTech.2008.17},
1515+ author = {Zhai, Gaoshou and Li, Yaodong},
1616+ year = {2009},
1717+ month = {01},
1818+ pages = {58 - 61},
1919+ title = {Analysis and Study of Security Mechanisms inside Linux Kernel},
2020+ doi = {10.1109/SecTech.2008.17},
2121+}
2222+2323+2424+@article{ecdsa,
2525+ author = {Johnson, Don and Menezes, Alfred and Vanstone, Scott},
2626+ title = {The Elliptic Curve Digital Signature Algorithm (ECDSA)},
2727+ year = {2001},
2828+ issue_date = {August 2001},
2929+ publisher = {Springer-Verlag},
3030+ address = {Berlin, Heidelberg},
3131+ volume = {1},
3232+ number = {1},
3333+ issn = {1615-5262},
3434+ url = {https://doi.org/10.1007/s102070100002},
3535+ doi = {10.1007/s102070100002},
3636+ abstract = {The Elliptic Curve Digital Signature Algorithm (ECDSA) is the
3737+ elliptic curve analogue of the Digital Signature Algorithm (DSA).
3838+ It was accepted in 1999 as an ANSI standard and in 2000 as IEEE
3939+ and NIST standards. It was also accepted in 1998 as an ISO
4040+ standard and is under consideration for inclusion in some other
4141+ ISO standards. Unlike the ordinary discrete logarithm problem and
4242+ the integer factorization problem, no subexponential-time
4343+ algorithm is known for the elliptic curve discrete logarithm
4444+ problem. For this reason, the strength-per-key-bit is
4545+ substantially greater in an algorithm that uses elliptic curves.
4646+ This paper describes the ANSI X9.62 ECDSA, and discusses related
4747+ security, implementation, and interoperability issues.},
4848+ journal = {Int. J. Inf. Secur.},
4949+ month = aug,
5050+ pages = {36–63},
5151+ numpages = {28},
5252+ keywords = {Key words: Signature schemes --- Elliptic curve cryptography ---
5353+ DSA --- ECDSA},
2154}
···11-This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/nixos.org) (preloaded format=pdflatex 1980.1.1) 14 MAY 2025 15:42
11+This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/nixos.org) (preloaded format=pdflatex 1980.1.1) 26 MAY 2025 14:52
22entering extended mode
33 \write18 enabled.
44 %&-line parsing enabled.
···441441the way to recover is to insert both the forgotten and the
442442deleted material, e.g., by typing `I$}'.
443443444444+! Missing $ inserted.
445445+<inserted text>
446446+ $
447447+l.22
448448+449449+I've inserted a begin-math/end-math symbol since I think
450450+you left one out. Proceed, with fingers crossed.
451451+452452+453453+Overfull \hbox (101.10962pt too wide) in paragraph at lines 14--22
454454+[]$[]\OML/cmm/m/it/10 ecurity; author \OT1/cmr/m/n/10 =
455455+ []
456456+457457+458458+Overfull \hbox (171.02025pt too wide) in paragraph at lines 14--22
459459+[]\OML/cmm/m/it/10 ; year \OT1/cmr/m/n/10 =
460460+ []
461461+462462+463463+Overfull \hbox (64.0024pt too wide) in paragraph at lines 14--22
464464+[]\OML/cmm/m/it/10 ; month \OT1/cmr/m/n/10 =
465465+ []
466466+467467+468468+Overfull \hbox (49.78932pt too wide) in paragraph at lines 14--22
469469+[]\OML/cmm/m/it/10 ; pages \OT1/cmr/m/n/10 =
470470+ []
471471+472472+473473+Overfull \hbox (65.72632pt too wide) in paragraph at lines 14--22
474474+[]\OML/cmm/m/it/10 ; title \OT1/cmr/m/n/10 =
475475+ []
476476+477477+478478+Overfull \hbox (306.94754pt too wide) in paragraph at lines 14--22
479479+[]\OML/cmm/m/it/10 ; doi \OT1/cmr/m/n/10 =
480480+ []
481481+482482+483483+Overfull \hbox (113.78154pt too wide) in paragraph at lines 14--22
484484+[]\OML/cmm/m/it/10 ;$
485485+ []
486486+487487+488488+! LaTeX Error: Missing \begin{document}.
489489+490490+See the LaTeX manual or LaTeX Companion for explanation.
491491+Type H <return> for immediate help.
492492+ ...
493493+494494+l.24 @
495495+ article{ecdsa,
496496+You're in trouble here. Try typing <return> to proceed.
497497+If that doesn't work, type X <return> to quit.
498498+499499+Missing character: There is no @ in font nullfont!
500500+Missing character: There is no a in font nullfont!
501501+Missing character: There is no r in font nullfont!
502502+Missing character: There is no t in font nullfont!
503503+Missing character: There is no i in font nullfont!
504504+Missing character: There is no c in font nullfont!
505505+Missing character: There is no l in font nullfont!
506506+Missing character: There is no e in font nullfont!
507507+Missing character: There is no e in font nullfont!
508508+Missing character: There is no c in font nullfont!
509509+Missing character: There is no d in font nullfont!
510510+Missing character: There is no s in font nullfont!
511511+Missing character: There is no a in font nullfont!
512512+Missing character: There is no , in font nullfont!
513513+Missing character: There is no a in font nullfont!
514514+Missing character: There is no u in font nullfont!
515515+Missing character: There is no t in font nullfont!
516516+Missing character: There is no h in font nullfont!
517517+Missing character: There is no o in font nullfont!
518518+Missing character: There is no r in font nullfont!
519519+Missing character: There is no = in font nullfont!
520520+Missing character: There is no J in font nullfont!
521521+Missing character: There is no o in font nullfont!
522522+Missing character: There is no h in font nullfont!
523523+Missing character: There is no n in font nullfont!
524524+Missing character: There is no s in font nullfont!
525525+Missing character: There is no o in font nullfont!
526526+Missing character: There is no n in font nullfont!
527527+Missing character: There is no , in font nullfont!
528528+Missing character: There is no D in font nullfont!
529529+Missing character: There is no o in font nullfont!
530530+Missing character: There is no n in font nullfont!
531531+Missing character: There is no a in font nullfont!
532532+Missing character: There is no n in font nullfont!
533533+Missing character: There is no d in font nullfont!
534534+Missing character: There is no M in font nullfont!
535535+Missing character: There is no e in font nullfont!
536536+Missing character: There is no n in font nullfont!
537537+Missing character: There is no e in font nullfont!
538538+Missing character: There is no z in font nullfont!
539539+Missing character: There is no e in font nullfont!
540540+Missing character: There is no s in font nullfont!
541541+Missing character: There is no , in font nullfont!
542542+Missing character: There is no A in font nullfont!
543543+Missing character: There is no l in font nullfont!
544544+Missing character: There is no f in font nullfont!
545545+Missing character: There is no r in font nullfont!
546546+Missing character: There is no e in font nullfont!
547547+Missing character: There is no d in font nullfont!
548548+Missing character: There is no a in font nullfont!
549549+Missing character: There is no n in font nullfont!
550550+Missing character: There is no d in font nullfont!
551551+Missing character: There is no V in font nullfont!
552552+Missing character: There is no a in font nullfont!
553553+Missing character: There is no n in font nullfont!
554554+Missing character: There is no s in font nullfont!
555555+Missing character: There is no t in font nullfont!
556556+Missing character: There is no o in font nullfont!
557557+Missing character: There is no n in font nullfont!
558558+Missing character: There is no e in font nullfont!
559559+Missing character: There is no , in font nullfont!
560560+Missing character: There is no S in font nullfont!
561561+Missing character: There is no c in font nullfont!
562562+Missing character: There is no o in font nullfont!
563563+Missing character: There is no t in font nullfont!
564564+Missing character: There is no t in font nullfont!
565565+Missing character: There is no , in font nullfont!
566566+Missing character: There is no t in font nullfont!
567567+Missing character: There is no i in font nullfont!
568568+Missing character: There is no t in font nullfont!
569569+Missing character: There is no l in font nullfont!
570570+Missing character: There is no e in font nullfont!
571571+Missing character: There is no = in font nullfont!
572572+Missing character: There is no T in font nullfont!
573573+Missing character: There is no h in font nullfont!
574574+Missing character: There is no e in font nullfont!
575575+Missing character: There is no E in font nullfont!
576576+Missing character: There is no l in font nullfont!
577577+Missing character: There is no l in font nullfont!
578578+Missing character: There is no i in font nullfont!
579579+Missing character: There is no p in font nullfont!
580580+Missing character: There is no t in font nullfont!
581581+Missing character: There is no i in font nullfont!
582582+Missing character: There is no c in font nullfont!
583583+Missing character: There is no C in font nullfont!
584584+Missing character: There is no u in font nullfont!
585585+Missing character: There is no r in font nullfont!
586586+Missing character: There is no v in font nullfont!
587587+Missing character: There is no e in font nullfont!
588588+Missing character: There is no D in font nullfont!
589589+Missing character: There is no i in font nullfont!
590590+Missing character: There is no g in font nullfont!
591591+Missing character: There is no i in font nullfont!
592592+Missing character: There is no t in font nullfont!
593593+Missing character: There is no a in font nullfont!
594594+Missing character: There is no l in font nullfont!
595595+Missing character: There is no S in font nullfont!
596596+Missing character: There is no i in font nullfont!
597597+Missing character: There is no g in font nullfont!
598598+Missing character: There is no n in font nullfont!
599599+Missing character: There is no a in font nullfont!
600600+Missing character: There is no t in font nullfont!
601601+Missing character: There is no u in font nullfont!
602602+Missing character: There is no r in font nullfont!
603603+Missing character: There is no e in font nullfont!
604604+Missing character: There is no A in font nullfont!
605605+Missing character: There is no l in font nullfont!
606606+Missing character: There is no g in font nullfont!
607607+Missing character: There is no o in font nullfont!
608608+Missing character: There is no r in font nullfont!
609609+Missing character: There is no i in font nullfont!
610610+Missing character: There is no t in font nullfont!
611611+Missing character: There is no h in font nullfont!
612612+Missing character: There is no m in font nullfont!
613613+Missing character: There is no ( in font nullfont!
614614+Missing character: There is no E in font nullfont!
615615+Missing character: There is no C in font nullfont!
616616+Missing character: There is no D in font nullfont!
617617+Missing character: There is no S in font nullfont!
618618+Missing character: There is no A in font nullfont!
619619+Missing character: There is no ) in font nullfont!
620620+Missing character: There is no , in font nullfont!
621621+Missing character: There is no y in font nullfont!
622622+Missing character: There is no e in font nullfont!
623623+Missing character: There is no a in font nullfont!
624624+Missing character: There is no r in font nullfont!
625625+Missing character: There is no = in font nullfont!
626626+Missing character: There is no 2 in font nullfont!
627627+Missing character: There is no 0 in font nullfont!
628628+Missing character: There is no 0 in font nullfont!
629629+Missing character: There is no 1 in font nullfont!
630630+Missing character: There is no , in font nullfont!
631631+Missing character: There is no i in font nullfont!
632632+Missing character: There is no s in font nullfont!
633633+Missing character: There is no s in font nullfont!
634634+Missing character: There is no u in font nullfont!
635635+Missing character: There is no e in font nullfont!
636636+! Missing $ inserted.
637637+<inserted text>
638638+ $
639639+l.28 issue_
640640+ date = {August 2001},
641641+I've inserted a begin-math/end-math symbol since I think
642642+you left one out. Proceed, with fingers crossed.
643643+644644+645645+LaTeX Warning: Command \textendash invalid in math mode on input line 50.
646646+647647+648648+LaTeX Warning: Command \textendash invalid in math mode on input line 50.
649649+650650+! Extra }, or forgotten $.
651651+l.54 }
652652+653653+I've deleted a group-closing symbol because it seems to be
654654+spurious, as in `$x}$'. But perhaps the } is legitimate and
655655+you forgot something else, as in `\hbox{$x}'. In such cases
656656+the way to recover is to insert both the forgotten and the
657657+deleted material, e.g., by typing `I$}'.
658658+444659)
445660! Emergency stop.
446661<*> /home/suri/dev/school/cse195/thesis/refs.bib
···449664450665451666Here is how much of TeX's memory you used:
452452- 18 strings out of 473203
453453- 480 string characters out of 5692202
454454- 391988 words of memory out of 5000000
455455- 23365 multiletter control sequences out of 15000+600000
667667+ 21 strings out of 473203
668668+ 500 string characters out of 5692202
669669+ 395988 words of memory out of 5000000
670670+ 23368 multiletter control sequences out of 15000+600000
456671 558837 words of font info for 36 fonts, out of 8000000 for 9000
457672 1141 hyphenation exceptions out of 8191
458458- 18i,2n,20p,127b,59s stack positions out of 10000i,1000n,20000p,200000b,200000s
673673+ 18i,3n,20p,125b,59s stack positions out of 10000i,1000n,20000p,200000b,200000s
459674! ==> Fatal error occurred, no output PDF file produced!
thesis.pdf
This is a binary file and will not be displayed.
+195
thesis.txt
···11+Twizzler-Security
22+A Capability-Based Security System for Twizzler
33+44+BSc Thesis
55+written by
66+Surendra Jammishetti
77+under the supervision of Owen B. Arden, and submitted to the
88+Examinations Board in partial fulfilment of the requirements for the degree of
99+1010+Computer Engineering B.S.
1111+at the University of California, Santa Cruz.
1212+1313+Date of the public defence:
1414+1515+Members of the Thesis Committee:
1616+1717+August 28, 2005
1818+1919+Dr. Peter Alvaro
2020+Dr. Andi Quinn
2121+2222+Abstract
2323+whatevea lowkey not even sure what to write
2424+2525+Contents
2626+1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2727+1.1 Data Centric Operating Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2828+1.2 Capability Based Security Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2929+1.3 Our Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3030+2 Key Pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3131+2.1 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3232+2.2 Compartmentalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3333+3 Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3434+3.1 Signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3535+3.2 Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3636+3.3 Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3737+4 Security Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3838+4.1 Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3939+5 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4040+6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4141+Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4242+4343+1
4444+4545+Chapter 1
4646+4747+Introduction
4848+In mainstream operating systems, security policy is enforced at runtime by a omnicient and all
4949+powerful kernel. It acts as the bodyguard, holding all i/o and data protected unless the requesting
5050+party has the authorization to access some resource. This tight coupling of security policy and
5151+access mechanisms works great since the kernel is always there and the only way to access anything
5252+through it. However the enforcement of security policy starts getting complicated when we try to
5353+seperate the access mechanisms from the kernel.
5454+5555+1.1 Data Centric Operating Systems
5656+Data centric operating systems are defined by two principles [Bit+20]:
5757+1. Provide direct, kernel-free, access to data.
5858+2. A notion of pointers that are tied to the data they represent.
5959+Mainstream operating systems fail to classify as data-centric operating systems, as they rely on the
6060+kernel for all data access, and use virtualized pointers per process to represent underlying data. The
6161+benefit of this “class” of operating systems comes from the low overhead for data manipulation, due
6262+to the lack of kernel involvement. However our previous security model fails to operate here as, by
6363+defenition, the kernel cannot be infront of accesses to data.
6464+6565+1.2 Capability Based Security Systems
6666+Capability based security systems utilize capabilities, a finegrained
6767+6868+1.3 Our Contributions
6969+In this thesis, I detail the fundamentals of security in the Twizzler operating system, and discuss
7070+how I implement and refine some of the high level ideas described in [Bit+20] and an early draft of
7171+a Twizzler security paper. Additionally we evaluate these systems inside kernel and user space, with
7272+comparsions to micro-benchmarks done with an older version of twizzler.
7373+7474+2
7575+7676+Chapter 2
7777+7878+Key Pairs
7979+Key pairs are the Signing and Verifying keys used to create Capabilities. We design the keypair
8080+objects to be agnostic towards what cryptographic schemes are underneath, allowing for the underlying algorithm to be changed [Bit+20]. The keys themselves are stored inside of objects, allowing
8181+for persistent or volatile storage depending on object specification. It also allows for the keys to
8282+fall under the security system, meaning that signing keys can be protected by a different keypair,
8383+forming this chain of trust.
8484+8585+2.1 Abstraction
8686+The SigningKey struct is a fixed length byte array with a length field and an enum specifying
8787+what algorithm that key should be interpreted as. Currently we use the Elliptic Curve Digital
8888+Signature Algorithm (ECDSA) [JMV01] to sign capabilities and verify them, but the simplistic dat
8989+arepresentation allows for any arbitrary alogrithm to be used as long as the key can be represented
9090+as bytes.
9191+Additionally this specification allows for backward compatibility, allowing for an outdated
9292+signing scheme to be used in support of older programs / files. An existing drawback for backward
9393+compatibility is the maximum size of the buffer we store the key in. Currently we set the maximum
9494+size as 256 bytes, meaning if a future cryptographic signing scheme was to be found with a private
9595+key size larger than 256 bytes, we would have to drop backwards compatibility. Sure this can be
9696+prevented by setting the maximum size to something larger, but that a tradeoff between possible
9797+cryptographic schemes vs the real on-disk cost of larger buffers.
9898+9999+2.2 Compartmentalization
100100+To create an object in twizzler, you specify the id of a verifying key object so the kernel knows which
101101+key to use to verify any capabilities permitting access to the object. You can also specify default
102102+protections for an object or create a capability with the signing key and any desired permissions.
103103+The neat thing about this design is that you can use a single keypair in-order to use any arbitrary
104104+amount of objects. This results in the possibility of finegrained access control to semantic groupings
105105+of objects.
106106+An example could be a colletion of objects holding files for a class, and grouping all of them
107107+under the same key.
108108+Now restricting access to that one key prevents the usage of that key to create any new objects?
109109+110110+3
111111+112112+Chapter 3
113113+114114+Capabilities
115115+Capabilities are the atomic unit of security in Twizzler, acting as tokens of protections granted
116116+to a process, allowing it to access some object in the ways it describes. A Capability is built up of
117117+the following fields.
118118+struct Cap {
119119+target: ObjID,
120120+121121+// Object ID this capability grants access to
122122+123123+accessor: ObjID,
124124+125125+// Security context ID in which this capability resides
126126+127127+prots: Protections, // Specific access rights this capability grants
128128+flags: CapFlags,
129129+130130+// Cryptographic configuration for capability validation
131131+132132+gates: Gates,
133133+134134+// Additional constraints on when this capability can be used
135135+136136+revocation: Revoc,
137137+138138+// Specifies when this capability is invalid, i.e. expiration.
139139+140140+sig: Signature,
141141+142142+// The signature inside the capability
143143+144144+}
145145+146146+3.1 Signature
147147+The signature inside is what determines the validity of this capability. The only possible signer of
148148+some capability is who ever has permissions to the signing key object, or the kernel. In this way,
149149+if the signer decides to make the signing key private to them, no other entity can administer this
150150+signature for this capability. The signature is built up of a array with a maximum length and a
151151+enum representing what type of cryptographic scheme was used to create it; quite similar to the
152152+keys mentioned previously. The message being signed to form the signature is the bytes of each of
153153+the fields inside the capability being hashed. There is support for multiple hashing algorithms as
154154+described in 3.1.
155155+156156+3.2 Gates
157157+3.3 Flags
158158+Currently flags in capabilities are used to specify which hashing algorithm to use in order to form a
159159+message to be signed. We allow for multiple algorithms to be used in order to allow for backwards
160160+capability when newer, more efficient hashing algorithms are created.
161161+There is also plenty of space left in the bitmap, allowing for future work to develop more
162162+expressive ways of using capabilities, such as planned future work to implement information flow
163163+control into the twizzler security system.
164164+165165+4
166166+167167+Chapter 4
168168+169169+Security Contexts
170170+4.1 Map
171171+172172+5
173173+174174+Chapter 5
175175+176176+Results
177177+178178+6
179179+180180+Chapter 6
181181+182182+Conclusion
183183+184184+7
185185+186186+Bibliography
187187+[Bit+20] Bittman D, Alvaro P, Mehra P, Long DDE, Miller EL. Twizzler: a Data-Centric OS for
188188+Non-Volatile Memory. In:. 2020 USENIX Annual Technical Conference (USENIX ATC
189189+20), USENIX Association; 2020, pp. 65–80.
190190+[JMV01] Johnson D, Menezes A, Vanstone S. The Elliptic Curve Digital Signature Algorithm
191191+(ECDSA). Int J Inf Secur 2001;1:36–63. https://doi.org/10.1007/s102070100002.
192192+193193+8
194194+195195+
+1-2
thesis.typ
···2626#mol-abstract[
2727 whatevea
2828 lowkey not even sure what to write
2929- #lorem(150)
3030-]
2929+ ]
313032313332