Safeget
-------
Download verified files, not malware. This is the most effective way to get your users to verify files.
With one command Safeget downloads <em>and</em> does the complex security checks that most people skip. Verifies pgp/gpg sigs, hashes, and more.
Description
-----------
Give them one command that downloads <em>and</em> verifies. They'll verify every time.
Safeget requires python3. If you see a "SyntaxError: invalid syntax", then you probably are tryinng to run safeget with python2.
Get Users to Always Verify Sigs and Hashes When They Download Files
With Safeget your users can download and carefully verify your files with a single command. They'll verify every time. And, you'll be confident that malware isn't being distributed under your name.
We all know our customers risk malware when they don't verify downloaded files. But it's so much hassle, most users skip it and hope for the best. Your own server logs show that.
Few people have any idea what a pgp/gpg sig or a hash is. People believe software should handle all that complex stuff. They're right.
Give them one command that downloads and verifies. They'll verify every time.
We can make it even simpler for your users, with free customized version for you that has your download url and verification data built in. No command line params. Just tell people to run it.
Safeget is free and open source.
Requirements
-------------
Safeget requires python3. You can run it on Windows, Linux, or Mac OS X.
Install
-------
If your operating system offers a safeget package, install it.
But safeget isn't in many package managers yet. Get it from PyPi with:
pip3 install safeget
Or download the safeget-installer and run it:
python3 safeget-installer
Windows users: If you do not have GPG installed on your Windows computer, then you'll need to run Safeget as an administrator the first time you run it so that Safeget can install GPG onto your system. To open a command prompt as an administrator, start to search for "command prompt". An area near the search box appears with an option to "Execute as administrator". Select that option and then you can issue any Safeget command.
Updates
-------
All future updates will only be available from:
git clone https://codeberg.org/topdevpros/safeget.git
How it Works
------------
Your users just download the custom installer and run it. They don't have to install anything first. It's really hard to get it wrong.
You publish one command for your users that shows all the details. The more checks you specify, the safer your users are. It's good practice to publish your Safeget command through multiple channels.
Here's an example of using Safeget with one command for Bitcoin Core:
safeget \
https://bitcoin.org/bin/bitcoin-core-0.21.0/bitcoin-0.21.0-x86_64-linux-gnu.tar.gz \
--pubkey https://raw.githubusercontent.com/bitcoin-core/bitcoincore.org/master/keys/laanwj-releases.asc \
--signedhash SHA256:https://example.com/open/safeget/hashes/bitcoin-core-0.21.0/SHA256SUMS.asc
With either option, Safeget takes the same steps:
1. Download the file
2. Download public keys
3. Import public keys
4. Download signed messages with hashes
5. Verify signed messages
6. Verify file hashes
Most people skip everything after "Download the file". Safeget never does.
When a parameter is a url, Safeget searches that web page for what it needs. For example, a pgp signature can be buried in text. Safeget checks the protocol, downloads the page, and extracts the sig.
To make it even simpler for your users, we're happy to create a free customized version of Safeget for you. so your users just issue a one word command. No command line params. Your custom Safeget has your download and verification data embedded. Then just tell people to run your one word command.
Multiple Verification Methods
-----------------------------
Safeget checks:
File source
Secure connection
Warns if keys and hashes are from same host
Explicit hashes
Ideally multiple hashes, because a collision with multiple modern hashes is extremely unlikely
PGP/GPG file signatures
Downloads and imports pgp public keys
Downloads and verifies pgp file signatures
Signed pgp/gpg messages containing hashes
Downloads and verifies hash signatures
Verifies the target file matches hashes
File size
Why Safeget is secure
---------------------
Safeget solves the question of which verification sources and methods to trust: Don't trust any of them too much. The solution is a defense in depth, using multiple hosts and algorithms.
Safeget is completely decentralized with no gatekeeper. There's no single point of failure.
Because Safeget can check many hashes in addition to pgp/gpg signatures, it's highly resistant to quantum computing attacks.
"Unlike many other signature systems, hash-based signatures would still be secure even if it proves feasible for an attacker to build a quantum computer." Internet Engineering Task Force - RFC 8554
Most file verification relies on a single host or algorithm. But no one really knows which ones are safe. Safeget checks as many as you like.
Safeget can get corroboration from multiple sources. Safeget can verify a file based on the file's source, pgp keys, pgp file signature, pgp signed hashes, explicit hashes, and more. You can spread the information across different hosts and use multiple hash algorithms. Everything has to agree for a file to verify.
Sideloading, downloading files from unofficial sources, is risky. Safeget can make sideloading much safer.
Put your Safeget command on your own host.
You can specify as many checks as you like, all in one command. Then wrap it all in a simple custom safeget.
The more checks, the more certain you are that the file is valid. It is extremely unlikely that a bad file will pass multiple hash algorithms. You might find yourself calculating the time needed to find a multiple hash collision in HDOU units — "Heat Death of the Universe".
Of course, Safeget's not perfect. You still have the risk that someone cracks your own system. But since you are security conscious enough to encourage people to verify, you probably can protect your own system. Users are very likely to get your real Safeget and Safeget protects very effectively against MITM attacks.
In practice, when you use Safeget with multiple signed hashes attackers will have to bypass or attack Safeget itself.
Safeget is distributed as open source, in a single python file, so it's easy to audit the code. Please do.
Automatically install too
You can tell Safeget to run a program after it's done. It's a great way to launch installers. With one command you can download, verify thoroughly, and install.
Bugs
If you see a "SyntaxError: invalid syntax", then you probably are trying to run Safeget with python2. It's a bug in python2. Use python3.
With Safeget, users get your files, not malware
Most people don't verify. Maybe they don't quite understand how or why. Even security pros sometimes skip it.
Instead of telling your users to follow a long and complex procedure they'll often skip, download and verify with Safeget.
It doesn't matter if they don't know what a pgp/gpg sig or hash is. With Safeget, users verify files.
Raw data
{
"_id": null,
"home_page": "https://codeberg.org/topdevpros/safeget",
"name": "safeget",
"maintainer": "topdevpros",
"docs_url": null,
"requires_python": ">=3.5",
"maintainer_email": "",
"keywords": "download verification sigs",
"author": "TopDevPros",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/ea/64/093b736fa19a3fb7fc49922890c4c6e71025dc5959b0ed390187adb0c76e/safeget-1.5.7.tar.gz",
"platform": null,
"description": "Safeget\n-------\n\nDownload verified files, not malware. This is the most effective way to get your users to verify files.\n\nWith one command Safeget downloads <em>and</em> does the complex security checks that most people skip. Verifies pgp/gpg sigs, hashes, and more.\n\nDescription\n-----------\n\nGive them one command that downloads <em>and</em> verifies. They'll verify every time.\n\nSafeget requires python3. If you see a \"SyntaxError: invalid syntax\", then you probably are tryinng to run safeget with python2.\n\nGet Users to Always Verify Sigs and Hashes When They Download Files\n\nWith Safeget your users can download and carefully verify your files with a single command. They'll verify every time. And, you'll be confident that malware isn't being distributed under your name.\n\nWe all know our customers risk malware when they don't verify downloaded files. But it's so much hassle, most users skip it and hope for the best. Your own server logs show that.\n\nFew people have any idea what a pgp/gpg sig or a hash is. People believe software should handle all that complex stuff. They're right.\n\nGive them one command that downloads and verifies. They'll verify every time.\n\nWe can make it even simpler for your users, with free customized version for you that has your download url and verification data built in. No command line params. Just tell people to run it.\n\nSafeget is free and open source.\n\nRequirements\n-------------\n\nSafeget requires python3. You can run it on Windows, Linux, or Mac OS X.\n\n\nInstall\n-------\n\nIf your operating system offers a safeget package, install it.\n\nBut safeget isn't in many package managers yet. Get it from PyPi with:\n\n pip3 install safeget\n\nOr download the safeget-installer and run it:\n\n python3 safeget-installer\n\nWindows users: If you do not have GPG installed on your Windows computer, then you'll need to run Safeget as an administrator the first time you run it so that Safeget can install GPG onto your system. To open a command prompt as an administrator, start to search for \"command prompt\". An area near the search box appears with an option to \"Execute as administrator\". Select that option and then you can issue any Safeget command.\n\n\nUpdates\n-------\n\nAll future updates will only be available from:\n\n git clone https://codeberg.org/topdevpros/safeget.git\n\n\nHow it Works\n------------\n\nYour users just download the custom installer and run it. They don't have to install anything first. It's really hard to get it wrong.\n\nYou publish one command for your users that shows all the details. The more checks you specify, the safer your users are. It's good practice to publish your Safeget command through multiple channels.\n\nHere's an example of using Safeget with one command for Bitcoin Core:\n\n safeget \\\n https://bitcoin.org/bin/bitcoin-core-0.21.0/bitcoin-0.21.0-x86_64-linux-gnu.tar.gz \\\n --pubkey https://raw.githubusercontent.com/bitcoin-core/bitcoincore.org/master/keys/laanwj-releases.asc \\\n --signedhash SHA256:https://example.com/open/safeget/hashes/bitcoin-core-0.21.0/SHA256SUMS.asc\n\nWith either option, Safeget takes the same steps:\n\n 1. Download the file\n 2. Download public keys\n 3. Import public keys\n 4. Download signed messages with hashes\n 5. Verify signed messages\n 6. Verify file hashes\n\nMost people skip everything after \"Download the file\". Safeget never does.\n\nWhen a parameter is a url, Safeget searches that web page for what it needs. For example, a pgp signature can be buried in text. Safeget checks the protocol, downloads the page, and extracts the sig.\n\nTo make it even simpler for your users, we're happy to create a free customized version of Safeget for you. so your users just issue a one word command. No command line params. Your custom Safeget has your download and verification data embedded. Then just tell people to run your one word command.\n\n\nMultiple Verification Methods\n-----------------------------\n\nSafeget checks:\n\n File source\n Secure connection\n Warns if keys and hashes are from same host\n Explicit hashes\n Ideally multiple hashes, because a collision with multiple modern hashes is extremely unlikely\n PGP/GPG file signatures\n Downloads and imports pgp public keys\n Downloads and verifies pgp file signatures\n Signed pgp/gpg messages containing hashes\n Downloads and verifies hash signatures\n Verifies the target file matches hashes\n File size\n\n\nWhy Safeget is secure\n---------------------\n\nSafeget solves the question of which verification sources and methods to trust: Don't trust any of them too much. The solution is a defense in depth, using multiple hosts and algorithms.\n\nSafeget is completely decentralized with no gatekeeper. There's no single point of failure.\n\nBecause Safeget can check many hashes in addition to pgp/gpg signatures, it's highly resistant to quantum computing attacks.\n\n \"Unlike many other signature systems, hash-based signatures would still be secure even if it proves feasible for an attacker to build a quantum computer.\" Internet Engineering Task Force - RFC 8554\n\nMost file verification relies on a single host or algorithm. But no one really knows which ones are safe. Safeget checks as many as you like.\n\nSafeget can get corroboration from multiple sources. Safeget can verify a file based on the file's source, pgp keys, pgp file signature, pgp signed hashes, explicit hashes, and more. You can spread the information across different hosts and use multiple hash algorithms. Everything has to agree for a file to verify.\n\n Sideloading, downloading files from unofficial sources, is risky. Safeget can make sideloading much safer.\n\nPut your Safeget command on your own host.\n\nYou can specify as many checks as you like, all in one command. Then wrap it all in a simple custom safeget.\n\nThe more checks, the more certain you are that the file is valid. It is extremely unlikely that a bad file will pass multiple hash algorithms. You might find yourself calculating the time needed to find a multiple hash collision in HDOU units \u2014 \"Heat Death of the Universe\".\n\nOf course, Safeget's not perfect. You still have the risk that someone cracks your own system. But since you are security conscious enough to encourage people to verify, you probably can protect your own system. Users are very likely to get your real Safeget and Safeget protects very effectively against MITM attacks.\n\nIn practice, when you use Safeget with multiple signed hashes attackers will have to bypass or attack Safeget itself.\n\nSafeget is distributed as open source, in a single python file, so it's easy to audit the code. Please do.\n\nAutomatically install too\n\nYou can tell Safeget to run a program after it's done. It's a great way to launch installers. With one command you can download, verify thoroughly, and install.\n\nBugs\n\nIf you see a \"SyntaxError: invalid syntax\", then you probably are trying to run Safeget with python2. It's a bug in python2. Use python3.\nWith Safeget, users get your files, not malware\n\nMost people don't verify. Maybe they don't quite understand how or why. Even security pros sometimes skip it.\n\nInstead of telling your users to follow a long and complex procedure they'll often skip, download and verify with Safeget.\n\nIt doesn't matter if they don't know what a pgp/gpg sig or hash is. With Safeget, users verify files.\n",
"bugtrack_url": null,
"license": "GNU General Public License v3 (GPLv3)",
"summary": "Safeget gets and verifies files. It does the security checks that almost everyone skips.",
"version": "1.5.7",
"project_urls": {
"Download": "https://codeberg.org/topdevpros/safeget.git",
"Homepage": "https://codeberg.org/topdevpros/safeget",
"Source Code": "https://codeberg.org/topdevpros/safeget/src/branch/main/source"
},
"split_keywords": [
"download",
"verification",
"sigs"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bc895dea879e8e4bac50a4200ee62d39089b2c022b07329581bd51d1f9ade10c",
"md5": "5438cf8ddd71400f53dfba3ee74390ec",
"sha256": "ac58609f47ec05038ea336620a64203a2d71409a063d705c03516988aa53f409"
},
"downloads": -1,
"filename": "safeget-1.5.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5438cf8ddd71400f53dfba3ee74390ec",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 17424,
"upload_time": "2023-12-31T08:07:16",
"upload_time_iso_8601": "2023-12-31T08:07:16.147957Z",
"url": "https://files.pythonhosted.org/packages/bc/89/5dea879e8e4bac50a4200ee62d39089b2c022b07329581bd51d1f9ade10c/safeget-1.5.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ea64093b736fa19a3fb7fc49922890c4c6e71025dc5959b0ed390187adb0c76e",
"md5": "b13b23dd5f4b19ef0ee9431bac338d74",
"sha256": "2b012b356b9183f9b94345ae2dd049a8d994d4fdcd5e670336e7a54e2c26e7f8"
},
"downloads": -1,
"filename": "safeget-1.5.7.tar.gz",
"has_sig": false,
"md5_digest": "b13b23dd5f4b19ef0ee9431bac338d74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 20526,
"upload_time": "2023-12-31T08:07:17",
"upload_time_iso_8601": "2023-12-31T08:07:17.577113Z",
"url": "https://files.pythonhosted.org/packages/ea/64/093b736fa19a3fb7fc49922890c4c6e71025dc5959b0ed390187adb0c76e/safeget-1.5.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-31 08:07:17",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": true,
"codeberg_user": "topdevpros",
"codeberg_project": "safeget",
"lcname": "safeget"
}