-
Notifications
You must be signed in to change notification settings - Fork 279
Repository tools #170
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Repository tools #170
Changes from all commits
Commits
Show all changes
213 commits
Select commit
Hold shift + click to select a range
eecdca2
Merge branch 'develop' of https://github.com/theupdateframework/tuf i…
vladimir-v-diaz 100e831
Merge and resolve conflicts
vladimir-v-diaz 5622e0c
Commence configurable crypto changes
vladimir-v-diaz 4c866bc
Continue configurable crypto design changes
vladimir-v-diaz a395607
Add updated schema description of new schema in formats.py
vladimir-v-diaz d0c5b71
Support adding any key type in keydb.py
vladimir-v-diaz 28b3b52
Modify updater.py to support multiple key types
vladimir-v-diaz 372908c
Modify signerlib.py to support multiple key types
vladimir-v-diaz 46d07be
Continue configurable crypto changes: add keys.py doctest
vladimir-v-diaz 115d844
Fix import, doctests, and function parameters in keys.py
vladimir-v-diaz cc87d4f
Add missing doctests to keys.py and pycrypto_keys.py
vladimir-v-diaz 37b665b
Modify behavior of configurable crypto and update conf.py
vladimir-v-diaz 3bbacd0
Fix docstring whitespace in formats.py
vladimir-v-diaz 31d603c
Update all unit tests affected by configurable crypto
vladimir-v-diaz ae2e748
Add new keytype schema in formats.py
vladimir-v-diaz a091b1f
Add test_keys.py and update keys.py
vladimir-v-diaz ac6dade
Move test cases to test_pycrypto_keys.py
vladimir-v-diaz 8d33d72
Update object schema names in formats.py
vladimir-v-diaz 2f61272
Update test cases moved over to test_pycrypto_keys.py
vladimir-v-diaz 81a1514
Add remaining test cases in test_pycrypto_keys.py
vladimir-v-diaz 8372100
Add a LengthString schema type to schema.py
vladimir-v-diaz b831016
Add ed25519 schemas to formats.py
vladimir-v-diaz f76dfd4
Validate arguments and update doctests in ed2519_keys.py
vladimir-v-diaz 7e948f3
Add initial test_ed25519_keys.py
vladimir-v-diaz 7e59396
Complete test_verify_signature() in test_ed25519_keys.py
vladimir-v-diaz 2244b6c
Merge changes following Monzur's review of ed25519_key.py
vladimir-v-diaz 42ea506
Update time_ed25519.py following configurable crypto changes
vladimir-v-diaz 7ae7f2d
Add new tuf.formats.py schema for pycrypto_keys.py
vladimir-v-diaz 8a7d0d4
Update docstrings and comments in pycrypto_keys.py
vladimir-v-diaz 05f7826
Update test_pycrypto_keys.py after pycrypto_keys.py changes
vladimir-v-diaz 6057450
Update keys.py with modified pycrypto_keys.py function names
vladimir-v-diaz 760cd62
Rename functions in keys.py and update test_keys.py
vladimir-v-diaz 45af911
Update docstrings and comments in keys.py
vladimir-v-diaz 5eb0858
Add import and export functions for passphrase-protected pem files in…
vladimir-v-diaz df8d84d
[WIP] Add libtuftools.py skeleton
vladimir-v-diaz b4db0f1
[WIP] Continue libtuf.py implementation
vladimir-v-diaz 298dc46
Remove roleinfo+Metadata.keys side effect
vladimir-v-diaz 4bd0b6d
Continue delegate() changes
vladimir-v-diaz 01deddf
Initial implementation of the repository tools.
vladimir-v-diaz d6b9e18
Fix repository.targets.revoke()
vladimir-v-diaz 973ed15
Added base markdown file
7049c73
Added the first code block for RSA key creation
ab09a28
Update README.md
SantiagoTorres 45c7ac3
Added the import key codeblock
a20dd92
Merge branch 'repository-tools' of github.com:SantiagoTorres/tuf into…
8ab4f9c
Added the root metadata codeblock
0cc8841
Added the targets,root and timestamp metadata codeblock
7aeeeb8
added the "add target" codeblock/section
363d170
Added the "remove targets" section and codeblock
21d245b
added the "create a delegated role" codeblock
dedf18d
Added the "Revoke Delegated Role" codeblock/section
bab3e5c
Added the diagram in the beginning
306769d
Update README.md
SantiagoTorres 788f2ed
Added the client-side codeblocks and section
00e9e3a
Merge branch 'repository-tools' of github.com:SantiagoTorres/tuf into…
4f990f3
Merge pull request #134 from SantiagoTorres/repository-tools
Dachshund f490e68
Add the bundled cryptographic library bindings.
trishankkarthik cbca428
Merge remote-tracking branch 'origin/repository-tools' into repositor…
trishankkarthik 6c376a3
Update README.md with correct import statements
Dachshund 52e879e
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz cff05ad
Update README.md
vladimir-v-diaz 8b16b00
Update README.md
vladimir-v-diaz 6bcaee3
Update README.md
vladimir-v-diaz fff486d
Update README.md
vladimir-v-diaz 19c659f
Update README.md
vladimir-v-diaz 8520c49
Update README.md
vladimir-v-diaz 86e8f0b
Switch default ed25519 cryptography library to 'ed25519'
vladimir-v-diaz 4a12474
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz b2e9fca
Remove evpy.
trishankkarthik c860d27
Add 'tuf/client/basic_client.py' to setup.py
vladimir-v-diaz 691081c
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 6cc0b90
Remove invalid signatures from signables prior to final repository.wr…
vladimir-v-diaz 9acebfa
Update README.md
vladimir-v-diaz 85d2b7f
Add updates and features following review
vladimir-v-diaz ba69b23
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz d2d6794
Support compressed metadata for all role types and minor edits
vladimir-v-diaz f1d72f0
Update README.md
vladimir-v-diaz 3ca6261
Merge and resolve conflicts
49e7db2
Update README.md
vladimir-v-diaz 9f75253
Add libtuf-diagram.png
vladimir-v-diaz 6073cb5
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 12982a2
Update README.md
vladimir-v-diaz ff821e2
Update README.md
vladimir-v-diaz eb7f8a5
Update old repository tools affected by renamed function
vladimir-v-diaz da767a4
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz b6804d2
Update README.md
vladimir-v-diaz d142cb8
Update README.md
vladimir-v-diaz e437dba
Update comments & docstrings, fix bug, and address issues #135 and #138
vladimir-v-diaz 008315c
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz e8f8fe4
Update README.md
vladimir-v-diaz ce31e93
Remove test print statements and fix bugs reported by Lai
vladimir-v-diaz 2b5c83b
Fix typo
vladimir-v-diaz 3459b6b
Add clear_targets() method to Targets
vladimir-v-diaz a76a247
Refactor Repository.write(), and write_delegated_metadata()
vladimir-v-diaz 46a3b9b
Resolve merge conflict
vladimir-v-diaz 191f32a
Continue refactor of libtuf.py
vladimir-v-diaz 21e9291
Implement enhancement outlined in issue #136
vladimir-v-diaz 8d34b7a
Continue updating the comments and docstrings of libtuf.py
vladimir-v-diaz c58906f
Fix for issue #153
vladimir-v-diaz 738fa4d
Remove test import statement changes from previous commit
vladimir-v-diaz 6de2fdc
Initial re-implementation of compressed metadata verification in upda…
vladimir-v-diaz 8fdf029
Fix for issue #148
vladimir-v-diaz 68eedeb
Initial commit for Issue #143 and #144
vladimir-v-diaz 56bdd48
Add comments and re-add ed25519 to conf.py
vladimir-v-diaz 79c0c5d
Re-add generate_rsa_encrypted_pem
vladimir-v-diaz 7a08bad
Continue documentation effort and fix outdated libtuf.py
vladimir-v-diaz 8b7745c
Add final comment+docstring updates to keys.py
vladimir-v-diaz d275432
Update libtuf.py documentation and address issues #143 and #144
vladimir-v-diaz ae55f0a
Add initial tuf.client.updater.py README documentation
vladimir-v-diaz 18ce211
Update README.md
vladimir-v-diaz bf1c319
Update README.md
vladimir-v-diaz 026daac
Update README.md
vladimir-v-diaz ac2192f
Update README.md
vladimir-v-diaz d22c48f
Add missing docstring to updater.py
vladimir-v-diaz 182368e
Update README.md
vladimir-v-diaz 8199033
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 5c614f3
Add create_new_repository() docstring in libtuf.py
vladimir-v-diaz 45c65c9
Merge branch 'develop' into repository-tools
vladimir-v-diaz d3abb07
Update formats.py readability
vladimir-v-diaz d07d0b2
Fix typo
vladimir-v-diaz 4aee4bf
Continue documentation updates to libtuf.py
vladimir-v-diaz 03dcb3f
Update the Targets methods in libtuf.py
vladimir-v-diaz 89dbd38
Initial metadata and security documentation
vladimir-v-diaz ec550ff
Update README.md
vladimir-v-diaz 52e9e08
Move documentation to root directory
vladimir-v-diaz b64a905
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz ee2ce4c
Update SECURITY.md
vladimir-v-diaz ba2a5db
Update SECURITY.md
vladimir-v-diaz 4e8f5b1
Update SECURITY.md
vladimir-v-diaz 47c4364
Update METADATA.md
vladimir-v-diaz 6c7a758
Update README.md
vladimir-v-diaz 4647d4a
Address Issue #120
vladimir-v-diaz 246d2e7
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 1a1f9ce
Update README.md
vladimir-v-diaz 6cb230a
Add whitespace to log messages and update the top-level role objects …
vladimir-v-diaz ba28237
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 8a805bd
Fix pycrypto_keys.py header block, libtuf.py doc update, and minor fo…
vladimir-v-diaz 4833898
Vendor ed25519 and address Issue #122
vladimir-v-diaz 2a61a80
Update modules affected by the vendored ed25519 and update libtuf.py
vladimir-v-diaz 0548eda
Address Issue #147 in libtuf.py
vladimir-v-diaz f866da7
Address Issues #165, #158, and #147.
vladimir-v-diaz d5ca811
Update libtuf-diagram.
vladimir-v-diaz 5a7c8f3
Update README.md
vladimir-v-diaz b5c640c
Minor edits to previous commit.
vladimir-v-diaz a9b27fc
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz a2db039
Update conf.py header and comments
vladimir-v-diaz c39abf9
Update, test, and complete Issue #100 target methods.
vladimir-v-diaz bdef375
Update README.md
vladimir-v-diaz 0399e5a
Update tuf-spec.txt
vladimir-v-diaz 4d92ea6
Update README.md
vladimir-v-diaz cbf85fb
Update README.md
vladimir-v-diaz b73393c
Resolve issues #149 and #155.
vladimir-v-diaz 32d4ae0
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 1e69c95
Remove linked+outdated client and server specs
vladimir-v-diaz 780480a
Update README.md
vladimir-v-diaz cd60d6d
Address issue #164.
vladimir-v-diaz 08c8f04
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 08f894f
Update README.md
vladimir-v-diaz 04221d3
Address issue #163.
vladimir-v-diaz 85a120f
Initial implementation of Issue #151.
vladimir-v-diaz a9d90e7
Finish initial implementation of Issue #151 and reading consistent sn…
vladimir-v-diaz b2e220f
Fix Issue #167.
vladimir-v-diaz 98cb212
Update README.md
vladimir-v-diaz fbd7b14
Address Issues #151 and #156.
vladimir-v-diaz 52fdb2e
Adjust logger level for compressed and uncompressed metadata.
vladimir-v-diaz 5d1906a
Update issues #151 and #137.
vladimir-v-diaz 96f6152
Update issue #137.
vladimir-v-diaz 973d3a2
Address Issue #137 and update repository_tool.py.
vladimir-v-diaz 5706408
Update repository tool diagram and README.
vladimir-v-diaz ffa4bbe
Update README.md
vladimir-v-diaz 761c83f
Remove outdated module name from repository_tool.py diagram.
vladimir-v-diaz 7f8a7e7
Refactor and fix status() in repository_tool.py.
vladimir-v-diaz 298f52d
Modify format of paths in metadata and minor fixes.
vladimir-v-diaz 8712099
Verify delegated target paths in repository_tool.py.
vladimir-v-diaz 2c55b94
Modify the extension of rolename files.
vladimir-v-diaz 7b53581
Update README.md
vladimir-v-diaz 3b5e0c0
Merge 'develop' and resolve conflicts.
vladimir-v-diaz aacf741
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 009ddd9
Rename top-level role and functions of repository_tool.py. Update do…
vladimir-v-diaz 36b59f9
Continue updating unit tests and modify ROOT_SCHEMA.
vladimir-v-diaz 7b27fce
Continue unit test updates.
vladimir-v-diaz a220996
Resolve remaining unit test failures.
vladimir-v-diaz e92cf75
Update METADATA.md.
vladimir-v-diaz 75c7ea5
Update test_extraneous_dependencies_attack.py.
vladimir-v-diaz 0e100a9
Update README.md.
vladimir-v-diaz b84225f
Add disclaimer for deprecated latex documents.
vladimir-v-diaz 57e42f0
Fix updater.py typo.
vladimir-v-diaz cdaacb9
Update tuf-spec.txt.
vladimir-v-diaz 9078814
Update repository_tool.py.
vladimir-v-diaz a357859
Update repository_tool.py.
vladimir-v-diaz a6c3b44
Update tuf-spec.txt
vladimir-v-diaz 00c6911
Implement key format requested in issue #171.
vladimir-v-diaz 637d7af
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 636dfef
Update repository_tool.py.
vladimir-v-diaz 3e9ac96
Update README.md
vladimir-v-diaz 73adff9
Update format_rsakey_from_pem() in keys.py.
vladimir-v-diaz b22b769
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 77dfbc3
Raise exception if key not found in the key-removal methods.
vladimir-v-diaz 643ab34
Update README.md
vladimir-v-diaz 08c41bd
Update README.md
vladimir-v-diaz 512d24d
Modify load_signing_key() exception message.
vladimir-v-diaz a73dbaa
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 511382b
Update README.md
vladimir-v-diaz 6207d62
Update repository_tool.py.
vladimir-v-diaz 595b6ae
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz 784b3bc
Update modules reviewed by Monzur.
vladimir-v-diaz 22aeff2
Update README.md
vladimir-v-diaz 416d39b
Update tuf-spec.txt
vladimir-v-diaz 1a17ac9
Update repository_tool.py and util.py.
vladimir-v-diaz b30e43c
Merge branch 'repository-tools' of https://github.com/theupdateframew…
vladimir-v-diaz c1f9c86
Log warning messages when sharing keys.
vladimir-v-diaz d92b78b
Update tuf-spec.txt
vladimir-v-diaz e9da583
Update repository_tool-diagram.png and comments.
vladimir-v-diaz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# Metadata | ||
|
||
Metadata files provide information that clients can use to make update decisions. Different metadata files provide different information. The various metadata files are signed by different roles. The concept of roles allows TUF to only trust information that a role is trusted to provide. | ||
|
||
The signed metadata files always include the time they were created and their expiration dates. This ensures that outdated metadata will be detected and that clients can refuse to accept metadata older than that which they've already seen. | ||
|
||
All TUF metadata uses a subset of the JSON object format. When calculating the digest of an object, we use the [Canonical JSON](http://wiki.laptop.org/go/Canonical_JSON) format. Implementation-level detail about the metadata can be found in the [spec](docs/tuf-spec.txt). | ||
|
||
There are four required top-level roles and one optional top-level role, each with their own metadata file. | ||
|
||
Required: | ||
|
||
* Root | ||
* Targets | ||
* Snapshot | ||
* Timestamp | ||
|
||
Optional: | ||
|
||
* Mirrors | ||
|
||
There may also be any number of delegated target roles. | ||
|
||
## Root Metadata (root.json) | ||
|
||
Signed by: Root role. | ||
|
||
Specifies the other top-level roles. When specifying these roles, the trusted keys for each role are listed along with the minimum number of those keys which are required to sign the role's metadata. We call this number the signature threshold. | ||
|
||
Note: Metadata content and name out-of-date. | ||
See [example](http://mirror1.poly.edu/test-pypi/metadata/root.txt). | ||
|
||
## Targets Metadata (targets.json) | ||
|
||
Signed by: Targets role. | ||
|
||
The targets.json metadata file lists hashes and sizes of target files. Target files are the actual files that clients are intending to download (for example, the software updates they are trying to obtain). | ||
|
||
This file can optionally define other roles to which it delegates trust. Delegating trust means that the delegated role is trusted for some or all of the target files available from the repository. When delegated roles are specified, they are specified in a similar way to how the Root role specifies the top-level roles: the trusted keys and signature threshold for each role is given. Additionally, one or more patterns are specified which indicate the target file paths for which clients should trust each delegated role. | ||
|
||
Note: Metadata content and name out-of-date. | ||
See [example](http://mirror1.poly.edu/test-pypi/metadata/targets.txt). | ||
|
||
## Delegated Targets Metadata (targets/foo.json) | ||
|
||
Signed by: A delegated targets role. | ||
|
||
The metadata files provided by delegated targets roles follow exactly the same format as the metadata file provided by the top-level Targets role. | ||
|
||
The location of the metadata file for each delegated target role is based on the delegation ancestry of the role. If the top-level Targets role defines a role named foo, then the delegated target role's full name would be targets/foo and its metadata file will be available on the repository at the path targets/foo.json (this is relative to the base directory from which all metadata is available). This path is just the full name of the role followed by a file extension. | ||
|
||
If this delegated role foo further delegates to a role bar, then the result is a role whose full name is targets/foo/bar and whose signed metadata file is made available on the repository at targets/foo/bar.json. | ||
|
||
Note: Metadata content and name out-of-date. | ||
See [example](http://mirror1.poly.edu/test-pypi/metadata/targets/unclaimed.txt). | ||
|
||
## snapshot Metadata (snapshot.json) | ||
|
||
Signed by: Snapshot role. | ||
|
||
The snapshot.json metadata file lists hashes and sizes of all metadata files other than timestamp.json. This file ensures that clients will see a consistent view of the files on the repository. That is, metadata files (and thus target file) that existed on the repository at different times cannot be combined and presented to clients by an attacker. | ||
|
||
Note: Metadata content and name out-of-date. | ||
See [example](http://mirror1.poly.edu/test-pypi/metadata/release.txt). | ||
|
||
## Timestamp Metadata (timestamp.json) | ||
|
||
Signed by: Timestamp role. | ||
|
||
The timestamp.json metadata file lists the hashes and size of the snapshot.json file. This is the first and potentially only file that needs to be downloaded when clients poll for the existence of updates. This file is frequently resigned and has a short expiration date, thus allowing clients to quickly detect if they are being prevented from obtaining the most recent metadata. An online key is generally used to automatically resign this file at regular intervals. | ||
|
||
There are two primary reasons why the timestamp.json file doesn't contain all of the information that the snapshot.json file does. | ||
|
||
* The timestamp.json file is downloaded very frequently and so should be kept as small as possible, especially considering that the snapshot.json file grows in size in proportion to the number of delegated target roles. | ||
* As the Timestamp role's key is an online key and thus at high risk, separate keys should be used for signing the snapshot.json metadata file so that the Snapshot role's keys can be kept offline and thus more secure. | ||
|
||
Note: Metadata content and name out-of-date. | ||
See [example](http://mirror1.poly.edu/test-pypi/metadata/timestamp.txt). | ||
|
||
## Mirrors Metadata (mirrors.json) | ||
|
||
Optionally signed by: Mirrors role. | ||
|
||
The mirrors.json file provides an optional way to provide mirror list updates to TUF clients. Mirror lists can alternatively be provided directly by the software update system and obtained in any way the system sees fit, including being hard coded if that is what an applications wants to do. | ||
|
||
No example available. At the time of writing, this hasn't been implemented in TUF. Currently mirrors are specified by the client code. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#Security | ||
|
||
Generally, a software update system is secure if it can be sure that it knows about the latest available updates in a timely manner, any files it downloads are the correct files, and no harm results from checking or downloading files. The details of making this happen are complicated by various attacks that can be carried out against software update systems. | ||
|
||
## Attacks and Weaknesses | ||
|
||
The following are some of the known attacks on software update systems, including weaknesses that make attacks possible. In order to design a secure software update framework, these need to be understood and protected against. Some of these issues are or can be related depending on the design and implementation of a software update system. | ||
|
||
* **Arbitrary software installation**. An attacker installs anything they want on the client system. That is, an attacker can provide arbitrary files in response to download requests and the files will not be detected as illegitimate. | ||
|
||
* **Rollback attacks**. An attacker presents a software update system with older files than those the client has already seen, causing the client to use files older than those the client knows about. | ||
|
||
* **Indefinite freeze attacks**. An attacker continues to present a software update system with the same files the client has already seen. The result is that the client does not know that new files are available. | ||
|
||
* **Endless data attacks**. An attacker responds to a file download request with an endless stream of data, causing harm to clients (e.g. a disk partition filling up or memory exhaustion). | ||
|
||
* **Slow retrieval attacks**. An attacker responds to clients with a very slow stream of data that essentially results in the client never continuing the update process. | ||
|
||
* **Extraneous dependencies attacks**. An attacker indicates to clients that in order to install the software they wanted, they also need to install unrelated software. This unrelated software can be from a trusted source but may have known vulnerabilities that are exploitable by the attacker. | ||
|
||
* **Mix-and-match attacks**. An attacker presents clients with a view of a repository that includes files that never existed together on the repository at the same time. This can result in, for example, outdated versions of dependencies being installed. | ||
|
||
* **Wrong software installation**. An attacker provides a client with a trusted file that is not the one the client wanted. | ||
|
||
* **Malicious mirrors preventing updates**. An attacker in control of one repository mirror is able to prevent users from obtaining updates from other, good mirrors. | ||
|
||
* **Vulnerability to key compromises**. At attacker who is able to compromise a single key or less than a given threshold of keys can compromise clients. This includes relying on a single online key (such as only being protected by SSL) or a single offline key (such as most software update systems use to sign files). | ||
|
||
##Design Concepts | ||
|
||
The design and implementation of TUF aims to be secure against all of the above attacks. A few general ideas drive much of the security of TUF. | ||
|
||
For the details of how TUF conveys the information discussed below, see the [Metadata documentation](METADATA.md). | ||
|
||
## Trust | ||
|
||
Trusting downloaded files really means trusting that the files were provided by some trusted party. Two frequently overlooked aspects of trust in a secure software update system are: | ||
|
||
* Trust should not be granted forever. Trust should expire if it is not renewed. | ||
* Compartmentalized trust. A trusted party should only be trusted for files that it is supposed to provide. | ||
|
||
## Mitigated Key Risk | ||
|
||
Cryptographic signatures are a necessary component in securing a software update system. The safety of the keys that are used to create these signatures affects the security of clients. Rather than incorrectly assume that private keys are always safe from compromise, a secure software update system must strive to keep clients as safe as possible even when compromises happen. | ||
|
||
Keeping clients safe despite dangers to keys involves: | ||
|
||
* Fast and secure key replacement and revocation. | ||
* Minimally trusting keys that are at high risk. Keys that are kept online or used in an automated fashion shouldn't pose immediate risk to clients if compromised. | ||
* Supporting the use of multiple keys with threshold/quorum signatures trust. | ||
|
||
## Integrity | ||
|
||
File integrity is important both with respect to single files as well as collections of files. It's fairly obvious that clients must verify that individual downloaded files are correct. Not as obvious but still very important is the need for clients to be certain that their entire view of a repository is correct. For example, if a trusted party is providing two files, a software update system should see the latest versions of both of those files, not just one of the files and not versions of the two files that were never provided together. | ||
|
||
## Freshness | ||
|
||
As software updates often fix security bugs, it is important that software update systems be able to obtain the latest versions of files that are available. An attacker may want to trick a client into installing outdated versions of software or even just convince a client that no updates are available. | ||
|
||
Ensuring freshness means to: | ||
|
||
* Never accept files older than those that have been seen previously. | ||
* Recognize when there may be a problem obtaining updates. | ||
|
||
Note that it won't always be possible for a client to successfully update if an attacker is responding to their requests. However, a client should be able to recognize that updates may exist that they haven't been able to obtain. | ||
|
||
## Implementation Safety | ||
|
||
In addition to a secure design, TUF also works to be secure against implementation vulnerabilities including those common to software update systems. In some cases this is assisted by the inclusion of additional information in metadata. For example, knowing the expected size of a target file that is to be downloaded allows TUF to limit the amount of data it will download when retrieving the file. As a result, TUF is secure against endless data attacks (discussed above). |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does it make sense to keep using quickstart? I thought it was deprecated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was deprecated. "tuf-client-spec.pdf" was moved to "tuf-client-spec.pdf.old".
I saved "tuf-client-spec.tex" just in case we decide to update it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't it be a good idea to add a disclaimer of that? just in case.
On 02/03/2014 05:59 PM, Vladimir Diaz wrote: