Rget
download URLs and verify the contents against a publicly recorded cryptographic log
Install / Use
/learn @merklecounty/RgetREADME
rget
Archived Project Warning: rget is archived. Architectual issues made the project unmaintainable longterm (see issue). The rearchitected spiritual successor is under development: see transparencylog/btget.
rget downloads URLs and verifies the contents against a publicly recorded cryptographic log. The public log gives users of rget a number of useful properties:
- Verifiability of a downloaded URL's contents being identical to what the rest of the world sees
- Searchability of recorded content changes of a URL
- Notifications to any interested party about changes to the URLs contents
In practice the way the system works is a URL owner will publish the cryptographic digests at a URL adjacent to the content a rget user is downloading. The rget tool will download the digest and verify this digest appears in the Certificate Transparency log via a specially crafted DNS name.
Learn more and stay up to date with the project blog and newsletter. Checkout some of the blog posts:
Installation
Download the appropriate release from https://github.com/merklecounty/rget/releases and extract the archive
Example Usage
Use rget to download the v3.4.2 etcd release for macOS and verify that the contents are publicly recorded.
rget https://github.com/etcd-io/etcd/releases/download/v3.4.2/etcd-v3.4.2-darwin-amd64.zip
Developer Usage
GitHub Developer Usage
It takes two commands to make a release available for verified download with rget:
rget github publish-release-sums https://github.com/merklecounty/rget/releases/tag/v0.0.6
The first command will start a local web server and open a Github authorization URL in your browser. You will have 120 seconds to authorize it.
When authorized, it will calculate SHA256 sums for every file in the release,
create a SHA256SUMS file, and add it to the Github release.
rget submit https://github.com/merklecounty/rget/releases/download/v0.0.6/SHA256SUMS
The second command will submit the sums to the log. This does not use any GitHub credentials.
Note: If a project has release automation that uploads to GitHub simply add
the creation of SHA256SUMS to the automation instead of using github publish-release-sums and call rget submit after uploading. See the
integrations doc for a list of tools that work
out of the box. As an example rget uses Go
Releaser for automation.
Administration Usage
Run a server that will upload SHA files to a git repo for file backing
rget server <public git repo> <private certificates git repo>
FAQ
If you have a question that isn't answered here please open an issue or start a discussion on the mailing list
-
Q: Where did this idea come from?
-
A: This project builds upon a design doc for Binary Transparency originally designed for the Mozilla Firefox project.
-
Q: Why not build this ontop of blockchain?
-
A: Blockchain could be used to create a similar guarantee. However, using the Certificate Transparency technology extends a number of advantages and was a pragmatic choice to get this project going: the industry momentum of certificate transparency log technology (1), leverage existing web technologies like DNS and TLS (2), and finally most practical applications that want to use blockchain with the web end up using a centralized gateway for speed and reliability (3)(4). Perhaps as the bridge between the web and blockchain matures it will become a more practical option.
-
Q: Why not use GPG keys or other public key signing?
-
A: This is complimentary to public key signing! Public key signing asserts that someone with access to the private key signed the exact content. But, the private key can be used to generate an unlimited number of signatures for different content. If the URLs contents are both signed and logged in the URL content record then there is a guarantee that both the owner of the private key signed the content AND the content being fetched is cryptographically identical to the content other people are fetching using rget.
-
Q: Where does the name rget come from?
-
A: The "r" stands for recorder, as in a clerk who records or processes records. In many governments a Recorder of Deeds (aka Registrar General, County Clerk, etc) is an official who is tasked with recording and maintaining important public records of real property. Similarly this project aims to maintain a public record of internet property in the form of the cryptographic digest of certain URLs and provide tools to verify those records. The "get" comes from the HTTP GET verb and other tools like Wget.
-
Q: What are examples of practical attacks this could mitigate?
-
A: A well known example is the Feb. 2016 attack on the Linux Mint project where an attacker replaced a version of a Linux Mint release with a new version that included a backdoor vulnerability. With luck this was detected and mitigated within a day, however, there are likely many projects that have been attacked in a similar way without catching the attack. Further, the project could not make a strong assurance to the community on how long they were vulnerable, only stating "As far as we know, the only compromised edition was Linux Mint 17.3 Cinnamon edition.". By ensuring the cryptographic digests of all releases end up in a publicly audited log the project could have stated exactly when the content changed and potentially used a Certificate Transparency monitor to get notified quickly once it happened.
-
Q: What happens if an attacker can modify SHA256SUMS files?
-
A: The modification will show up in the logs. As an example the v1.0 release of the philips/releases-test project was modified several times. And this appears in the log on both crt.sh and Google's Transparency Report
Related Skills
qqbot-channel
347.6kQQ 频道管理技能。查询频道列表、子频道、成员、发帖、公告、日程等操作。使用 qqbot_channel_api 工具代理 QQ 开放平台 HTTP 接口,自动处理 Token 鉴权。当用户需要查看频道、管理子频道、查询成员、发布帖子/公告/日程时使用。
docs-writer
100.2k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
347.6kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
cursor-agent-tracking
134A repository that provides a structured system for maintaining context and tracking changes in Cursor's AGENT mode conversations through template files, enabling better continuity and organization of AI interactions.
