in-toto
in-toto is a framework to protect supply chain integrity.
Science Score: 54.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
✓Committers with academic emails
7 of 43 committers (16.3%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.8%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
in-toto is a framework to protect supply chain integrity.
Basic Info
- Host: GitHub
- Owner: in-toto
- License: other
- Language: Python
- Default Branch: develop
- Homepage: https://in-toto.io
- Size: 3.07 MB
Statistics
- Stars: 925
- Watchers: 36
- Forks: 143
- Open Issues: 48
- Releases: 30
Topics
Metadata Files
README.md
in-toto

in-toto provides a framework to protect the integrity of the software supply chain. It does so by verifying that each task in the chain is carried out as planned, by authorized personnel only, and that the product is not tampered with in transit.
in-toto requires a project owner to create a layout. A layout lists the sequence of steps of the software supply chain, and the functionaries authorized to perform these steps. When a functionary performs a step in-toto gathers information about the used command and the related files and stores it in a link metadata file. As a consequence link files provide the required evidence to establish a continuous chain that can be validated against the steps defined in the layout.
The layout, signed by the project owners, together with the links, signed by the designated functionaries, are released as part of the final product, and can be validated manually or via automated tooling in, e.g. a package manager.
Getting Started
Installation
in-toto is available on PyPI and can be
installed via pip. See
in-toto.readthedocs.io
to learn about system dependencies and installation alternatives and
recommendations.
shell
pip install in-toto
Create layout, run supply chain steps and verify final product
Layout
The in-toto software supply chain layout consists of the following parts:
- expiration date
- readme (an optional description of the supply chain)
- functionary keys (public keys, used to verify link metadata signatures)
- signatures (one or more layout signatures created with the project owner key(s))
- software supply chain steps
correspond to steps carried out by a functionary as part of the software supply chain. The steps defined in the layout list the functionaries who are authorized to carry out the step (by key id). Steps require a unique name to associate them (upon verification) with link metadata that is created when a functionary carries out the step using the in-toto tools. Additionally, steps must have material and product rules which define the files a step is supposed to operate on. Material and product rules are described in the section below.
- inspections define commands to be run during the verification process and can also list material and product rules.
Take a look at the demo layout creation example for further information on how to create an in-toto layout.
Artifact Rules
A software supply chain usually operates on a set of files, such as source code, executables, packages, or the like. in-toto calls these files artifacts. A material is an artifact that will be used when a step or inspection is carried out. Likewise, a product is an artifact that results from carrying out a step.
The in-toto layout provides a simple rule language to authorize or enforce the artifacts of a step and to chain them together. This adds the following guarantees for any given step or inspection: - Only artifacts authorized by the project owner are created, modified or deleted, - each defined creation, modification or deletion is enforced, and also - restricted to the scope of its definition, which chains subsequent steps and inspections together.
Note that it is up to you to properly secure your supply chain, by authorizing, enforcing and chaining materials and products using any and usually multiple of the following rules:
- CREATE <pattern>
- DELETE <pattern>
- MODIFY <pattern>
- ALLOW <pattern>
- DISALLOW <pattern>
- REQUIRE <file>
- MATCH <pattern> [IN <source-path-prefix>] WITH (MATERIALS|PRODUCTS) [IN <destination-path-prefix>] FROM <step>
Rule arguments specified as <pattern> allow for Unix shell-style wildcards as implemented by Python's fnmatch.
in-toto's Artifact Rules, by default, allow artifacts to exist if they are not explicitly disallowed. As such, a DISALLOW * invocation is recommended as the final rule for most step definitions. To learn more about the different rule types, their guarantees and how they are applied, take a look at the Artifact Rules section of the in-toto specification.
Carrying out software supply chain steps
in-toto-run
in-toto-run is used to execute a step in the software supply chain. This can
be anything relevant to the project such as tagging a release with git,
running a test, or building a binary. The relevant step name and command are
passed as arguments, along with materials, which are files required for that
step's command to execute, and products which are files expected as a result
of the execution of that command. These, and other relevant details
pertaining to the step are stored in a link file, which is signed using the
functionary's key.
If materials are not passed to the command, the link file generated just
doesn't record them. Similarly, if the execution of a command via
in-toto-run doesn't result in any products, they're not recorded in the link
file. Any files that are modified or used in any way during the execution of
the command are not recorded in the link file unless explicitly passed as
artifacts. Conversely, any materials or products passed to the command are
recorded in the link file even if they're not part of the execution
of the command.
See this simple usage example from the demo application
for more details.
For a detailed list of all the command line arguments, run in-toto-run --help
or look at the online
documentation.
in-toto-record
in-toto-record works similar to in-toto-run but can be used for
multi-part software supply chain steps, i.e. steps that are not carried out
by a single command. Use in-toto-record start ... to create a
preliminary link file that only records the materials, then run the
commands of that step or edit files manually and finally use
in-toto-record stop ... to record the products and generate the actual
link metadata file. For a detailed list of all command line arguments and their usage,
run in-toto-record start --help or in-toto-record stop --help, or look at
the online
documentation.
Release final product
In order to verify the final product with in-toto, the verifier must have access to the layout, the *.link files,
and the project owner's public key(s).
Verification
Use in-toto-verify on the final product to verify that
- the layout was signed with the project owner's private key(s),
- has not expired,
- each step was performed and signed by the authorized functionary,
- the functionaries used the commands, they were supposed to use,
- materials and products of each step were in place as defined by the rules, and
- run the defined inspections
For a detailed list of all command line arguments and their usage, run
in-toto-verify --help or look at the
online
documentation.
Signatures
in-toto-sign is a metadata signature helper tool to add, replace, and
verify signatures within in-toto Link or Layout metadata, with options to:
- replace (default) or add signature(s), with layout metadata able to be
signed by multiple keys at once while link metadata can only be signed by one key at a time
- write signed metadata to a specified path (if no output path is specified,
layout metadata is written to the path of the input file while link metadata
is written to <name>.<keyid prefix>.link)
- verify signatures
This tool serves well to re-sign test and demo data. For example, it can be used if metadata formats or signing routines change.
For a detailed list of all command line arguments and their usage, run
in-toto-sign --help or look at the
online
documentation.
in-toto demo
You can try in-toto by running the demo application. The demo basically outlines three users viz., Alice (project owner), Bob (functionary) and Carl (functionary) and how in-toto helps to specify a project layout and verify that the layout has been followed in a correct manner.
Specification
You can read more about how in-toto works by taking a look at the specification.
Security Issues and Bugs
See SECURITY.md.
Governance and Contributing
For information about in-toto's governance and contributing guidelines, see GOVERNANCE.md and CONTRIBUTING.md.
Acknowledgments
This project is managed by Prof. Santiago Torres-Arias at Purdue University. It is worked on by many folks in academia and industry, including members of the Secure Systems Lab at NYU and the NJIT Cybersecurity Research Center.
This research was supported by the Defense Advanced Research Projects Agency (DARPA), the Air Force Research Laboratory (AFRL), and the US National Science Foundation (NSF). Any opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of DARPA, AFRL, and NSF. The United States Government is authorized to reproduce and distribute reprints notwithstanding any copyright notice herein.
Owner
- Name: in-toto
- Login: in-toto
- Kind: organization
- Website: https://in-toto.io/
- Repositories: 41
- Profile: https://github.com/in-toto
A framework to protect software supply chain integrity
Citation (CITATION.bib)
@inproceedings {236322,
author = {Santiago Torres-Arias and Hammad Afzali and Trishank Karthik Kuppusamy and Reza Curtmola and Justin Cappos},
title = {in-toto: Providing farm-to-table guarantees for bits and bytes},
booktitle = {28th USENIX Security Symposium (USENIX Security 19)},
year = {2019},
isbn = {978-1-939133-06-9},
address = {Santa Clara, CA},
pages = {1393--1410},
url = {https://www.usenix.org/conference/usenixsecurity19/presentation/torres-arias},
publisher = {USENIX Association},
month = aug,
}
GitHub Events
Total
- Create event: 49
- Issues event: 11
- Watch event: 71
- Delete event: 47
- Issue comment event: 64
- Member event: 1
- Push event: 80
- Pull request review comment event: 14
- Pull request review event: 72
- Pull request event: 148
- Fork event: 8
Last Year
- Create event: 49
- Issues event: 11
- Watch event: 71
- Delete event: 47
- Issue comment event: 64
- Member event: 1
- Push event: 80
- Pull request review comment event: 14
- Pull request review event: 72
- Pull request event: 148
- Fork event: 8
Committers
Last synced: 9 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Lukas Puehringer | l****r@n****u | 1,021 |
| dependabot[bot] | 4****] | 146 |
| Santiago Torres | t****s@g****m | 144 |
| Aditya Saky | a****a@s****n | 139 |
| Dimitri Papadopoulos | 3****s | 71 |
| dependabot-preview[bot] | 2****] | 53 |
| Rohan Bhiangi | r****7@g****m | 49 |
| Pradyumna Krishna | g****t@o****n | 38 |
| Michael Zhou | m****7@n****u | 19 |
| Shikher | r****t@s****m | 19 |
| isachit | i****k@g****m | 18 |
| Trishank K Kuppusamy | t****y@d****m | 18 |
| Dariksha | i****1@i****n | 14 |
| Justin Cappos | j****s@g****m | 11 |
| Kristel Fung | k****g@g****m | 11 |
| Ofek Lev | o****r@g****m | 9 |
| Brandon M Hunter | b****r@l****m | 9 |
| Brent Clausner | b****r@s****u | 7 |
| MinchinWeb | w****n@h****m | 4 |
| Leonidas Spyropoulos | a****e@g****m | 3 |
| Joshua Lock | j****k@v****m | 3 |
| Benjamin Wu | b****7@g****m | 3 |
| Vladimir Diaz | v****z@g****m | 3 |
| alexsmith15 | a****a@g****m | 3 |
| Yash Srivastav | a****n@y****g | 2 |
| didier | d****r@g****m | 2 |
| SolidifiedRay | y****6@n****u | 2 |
| Shekhar Chauhan | s****n@i****m | 2 |
| naveensrinivasan | 1****n | 1 |
| Artyom Baloyan | a****n@n****u | 1 |
| and 13 more... | ||
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 42
- Total pull requests: 264
- Average time to close issues: 9 months
- Average time to close pull requests: about 1 month
- Total issue authors: 13
- Total pull request authors: 23
- Average comments per issue: 3.83
- Average comments per pull request: 1.06
- Merged pull requests: 196
- Bot issues: 0
- Bot pull requests: 126
Past Year
- Issues: 5
- Pull requests: 123
- Average time to close issues: 7 days
- Average time to close pull requests: 4 days
- Issue authors: 4
- Pull request authors: 6
- Average comments per issue: 1.4
- Average comments per pull request: 0.54
- Merged pull requests: 85
- Bot issues: 0
- Bot pull requests: 74
Top Authors
Issue Authors
- lukpueh (26)
- adityasaky (4)
- dependabot[bot] (3)
- idunbarh (2)
- DimitriPapadopoulos (2)
- skinny-b (2)
- danbev (2)
- SantiagoTorres (1)
- yashpawar6849 (1)
- ultrasaurus (1)
- joshuagl (1)
- shenxianpeng (1)
- Ayush9026 (1)
- DarikshaAnsari (1)
- harshitasao (1)
Pull Request Authors
- dependabot[bot] (221)
- lukpueh (56)
- DimitriPapadopoulos (41)
- adityasaky (20)
- DarikshaAnsari (6)
- SolidifiedRay (4)
- SpencerKlem (3)
- skinny-b (3)
- JustinCappos (3)
- trishankatdatadog (2)
- chasen-bettinger (2)
- shekhar-chauhan (2)
- idunbarh (2)
- PradyumnaKrishna (2)
- s-t-e-v-e-n-k (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 2
-
Total downloads:
- pypi 35,998 last-month
- Total docker downloads: 1,542,797
-
Total dependent packages: 2
(may contain duplicates) -
Total dependent repositories: 34
(may contain duplicates) - Total versions: 51
- Total maintainers: 3
- Total advisories: 2
pypi.org: in-toto
A framework to define and secure the integrity of software supply chains
- Homepage: https://in-toto.io
- Documentation: https://in-toto.readthedocs.io/
- License: Apache Software License
-
Latest release: 3.0.0
published almost 2 years ago
Rankings
Maintainers (3)
Advisories (2)
proxy.golang.org: github.com/in-toto/in-toto
- Documentation: https://pkg.go.dev/github.com/in-toto/in-toto#section-documentation
- License: other
-
Latest release: v3.0.0+incompatible
published almost 2 years ago
Rankings
Dependencies
- actions/cache v2 composite
- actions/checkout v2 composite
- actions/setup-python v2 composite
- tox * development
- recommonmark *
- sphinx-argparse *
- sphinx-rtd-theme *
- attrs ==22.2.0
- cffi ==1.15.1
- cryptography ==39.0.0
- iso8601 ==1.1.0
- pathspec ==0.10.3
- pycparser ==2.21
- pynacl ==1.5.0
- python-dateutil ==2.8.2
- securesystemslib ==0.26.0
- six ==1.16.0
- bandit *
- coverage *
- pylint *
- attrs *
- iso8601 *
- pathspec *
- python-dateutil *
- securesystemslib >=0.26.0
- attrs *
- iso8601 *
- pathspec *
- python-dateutil *
- securesystemslib [crypto]>=0.18.0