{"id":13625948,"url":"https://github.com/airgap-it/airgap-vault","last_synced_at":"2026-01-30T11:05:02.737Z","repository":{"id":37182340,"uuid":"140544417","full_name":"airgap-it/airgap-vault","owner":"airgap-it","description":"The AirGap Vault is installed on a spare smartphone that has no connection to any network, thus it is air gapped. This app handles the private key.","archived":false,"fork":false,"pushed_at":"2026-01-28T15:20:09.000Z","size":78044,"stargazers_count":490,"open_issues_count":40,"forks_count":124,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-01-29T06:19:41.668Z","etag":null,"topics":["bitcoin","blockchain","crypto","crypto-wallet","cryptocurrency","ethereum","offline","polkadot","tezos","wallet"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/airgap-it.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-07-11T08:21:49.000Z","updated_at":"2026-01-23T16:32:26.000Z","dependencies_parsed_at":"2023-02-17T22:00:47.411Z","dependency_job_id":"5334e0e3-3eed-4bb9-8804-202b583a9053","html_url":"https://github.com/airgap-it/airgap-vault","commit_stats":null,"previous_names":[],"tags_count":70,"template":false,"template_full_name":null,"purl":"pkg:github/airgap-it/airgap-vault","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airgap-it%2Fairgap-vault","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airgap-it%2Fairgap-vault/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airgap-it%2Fairgap-vault/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airgap-it%2Fairgap-vault/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/airgap-it","download_url":"https://codeload.github.com/airgap-it/airgap-vault/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airgap-it%2Fairgap-vault/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28911820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T08:15:08.179Z","status":"ssl_error","status_checked_at":"2026-01-30T08:14:31.507Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","blockchain","crypto","crypto-wallet","cryptocurrency","ethereum","offline","polkadot","tezos","wallet"],"created_at":"2024-08-01T21:02:06.293Z","updated_at":"2026-01-30T11:05:02.722Z","avatar_url":"https://github.com/airgap-it.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Wallets"],"sub_categories":["Mobile wallets"],"readme":"# AirGap Vault\n\n\u003cp align=\"left\"\u003e\n    \u003cimg src=\"./banner.png\" /\u003e\n\u003c/p\u003e\n\n\u003e Self custody made simple and secure. Protect your crypto and store your private keys offline.\n\n[AirGap](https://airgap.it) is a crypto wallet system that lets you secure cypto assets with one secret on an offline device. The AirGap Vault application is installed on a dedicated device that has no connection to any network, thus it is air gapped. The [AirGap Wallet](https://github.com/airgap-it/airgap-wallet) is installed on your everyday smartphone.\n\n## Description\n\nAirGap Vault is responsible for secure key generation. Entropy from audio, video, touch and accelerometer are used together with the output of the hardware random number generator. The generated secret is saved in the secure enclave of the device, only accessible by biometric authentication. Accounts for multiple protcols can be created. Transactions are prepared by the AirGap Wallet and then transferred to the offline device via QR code, where it is signed and sent back to the Wallet using another QR code.\n\nAirGap Vault is a hybrid application (using the same codebase for Android and iOS). Created using AirGap's protocol agnostic `airgap-coin-lib` library to interact with different protocols and our own secure storage implementation.\n\n\u003cp align=\"left\"\u003e\n    \u003cimg src=\"./devices.png\" /\u003e\n\u003c/p\u003e\n\n## Download\n\n- [Google Play](https://play.google.com/store/apps/details?id=it.airgap.vault)\n- [App Store](https://itunes.apple.com/us/app/airgap-vault-secure-secrets/id1417126841?l=de\u0026ls=1\u0026mt=8)\n\n## Features\n\n- Secure secret generation with added entropy from audio, video, touch and device accelerometer\n- Secure storage using the secure enclave of the device, accessible only by biometric authenticaiton\n- Secure, one-way communication with AirGap Wallet over QR codes or URL-Schemes (app switching)\n- Create accounts for all supported currencies like Aeternity, Bitcoin, Ethereum, Tezos, Cosmos, Kusama, Polkadot, Groestlcoin etc.\n- Sign transactions offline without the secret ever leaving your device\n\n## Security\n\nThe security concept behind air-gapped systems is to work with two physically separated devices, one of which has no connection to the outside world or any network. In the context of AirGap, the component which has no internet connection is the AirGap Vault. The two components, AirGap Vault and AirGap Wallet, communicate through one-way communication using QR codes.\n\n### Key Generation\n\nThe entropy seeder uses the native secure random generator provided by the device and concatenates this with the sha3 hash of the additional entropy (audio, video, touch, accelerometer). The rationale behind this is:\n\n- The sha3 hashing algorithm is cryptographically secure, such that the following holds: `entropy(sha3(secureRandom())) \u003e= entropy(secureRandom())`\n- Adding bytes to the sha3 function will never lower entropy but only add to it, such that the following holds: `entropy(sha3(secureRandom() + additionaEntropy)) \u003e= entropy(sha3(secureRandom()))`\n- By reusing the hash of an earlier \"round\" as a salt, we can incorporate the entire collected entropy of the previous round\n- Native secure random cannot be fully trusted because there is no API to check the entropy pool it's using\n\nThe algorithm being used for the entropy seeding:\n\n```typescript\nconst ENTROPY_BYTE_SIZE = 256\nlet entropyHashHexString = null\n\nfunction toHexString(array) {\n  return array\n    .map(function (i) {\n      return ('0' + i.toString(16)).slice(-2)\n    })\n    .join('')\n}\n\nfunction seedEntropy(additionalEntropyArray) {\n  const secureRandomArray = new Uint8Array(ENTROPY_BYTE_SIZE)\n  window.crypto.getRandomValues(secureRandomArray)\n  console.log(entropyHashHexString + toHexString(secureRandomArray) + toHexString(additionalEntropyArray))\n  entropyHashHexString = sha3_256(entropyHashHexString + toHexString(secureRandomArray) + toHexString(additionalEntropyArray))\n  return entropyHashHexString\n}\n```\n\n### Supply Chain Attacks\n\nIn the past years, mutliple cryptocurrency wallets have been targeted by attackers to try and steal users funds. One common attack vector is the supply chain attack. In this attack, the attacker tries to compromise a dependency that is used in the wallet and use it to inject malicious code. At AirGap, we take utmost care of evaluating the dependencies we use. We have also introduced a system that separates the dependencies used during testing and development from the dependencies that are used to build and run the project. This reduces the risk of malicious code injection during the build and test steps.\n\n### Verifiable Builds\n\nA very important property of any open source wallet is reprucibility. This means that executable that is downloaded from the Play Store or App Store can be exactly reproduced by compiling the open source code. If this is not the case, it means that there is hidden or removed code in the published version that is not visible in the published source code.\n\nThe project [WalletScrutiny](https://walletscrutiny.com/posts/it.airgap.vault/) examines a wide variety of cryptocurrency wallets to determine their reproducibility. We're happy to say that **AirGap Vault** was one of the first wallets to be marked as \"reproducible\".\n\n### Security Audits\n\nThe application as a whole, as well as multiple components, have been audited by different third party companies.\n\n**All audits have found no way of extracting the private key from AirGap Vault.**\n\nThe reports will be released once all the findings have been resolved.\n\n## Build\n\nFirst follow the steps below to install the dependencies:\n\n```bash\n$ npm install -g @capacitor/cli\n$ npm install\n```\n\nRun locally in browser:\n\n```bash\n$ npm run start\n```\n\nBuild and open native project\n\n```bash\n$ npm run build\n$ npx cap sync\n```\n\nYou can now open the native iOS or Android projects in XCode or Android Studio respectively.\n\n```bash\n$ npx cap open ios\n$ npx cap open android\n```\n\n## Testing\n\nTo run the unit tests:\n\n```bash\n$ npm run install-test-dependencies\n$ npm test\n$ npm run install-build-dependencies\n```\n\n## Translations\n\nWe use [Transifex](https://www.transifex.com/) for the application translations.\n\nIf you want to contribute with translating the application you can do so by going to the [AirGap Transifex](https://explore.transifex.com/airgap/airgap/) page.\n\n### Updating translations\n\nTo import the translations from Transifex to the application, first you will need to install the transifex-cli. You can do so by creating a directory of your choice and intalling in it the package globally by running:\n\n```bash\ncurl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash\n```\n\nYou can now restart the terminal and check if it is installed by running:\n\n```bash\ntx --version\n```\n\nEvery available language can be found in `src/assets/i18n/\u003clang\u003e.json` where each json file corresponds to a different language. You can now import the updated translations from Transifex by running:\n\n```bash\ntx pull\n```\n\nThis will update all the local translations with the updated ones automatically.\n\nIf you want to send new variables from the default language file to transifex, you can do so by running:\n\n```bash\ntx push\n```\n\n## Disclosing Security Vulnerabilities\n\nIf you discover a security vulnerability within this application, please send an e-mail to hi@airgap.it. All security vulnerabilities will be promptly addressed.\n\n## Contributing\n\nBefore integrating a new feature, please quickly reach out to us in an issue so we can discuss and coordinate the change.\n\n- If you find any bugs, submit an [issue](../../issues) or open [pull-request](../../pulls).\n- If you want to integrate a new blockchain, please read the contributing guidelines in the [airgap-coin-lib](https://github.com/airgap-it/airgap-coin-lib) project.\n- Engage with other users and developers on the [AirGap Telegram](https://t.me/AirGap).\n\n## Related Projects\n\n- [AirGap Wallet](https://github.com/airgap-it/airgap-wallet)\n- [airgap-coin-lib](https://github.com/airgap-it/airgap-coin-lib)\n\n- [AirGap Linux Distribution](https://github.com/airgap-it/airgap-distro)\n- [apk-signer](https://github.com/airgap-it/airgap-raspberry-apk-signer)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairgap-it%2Fairgap-vault","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairgap-it%2Fairgap-vault","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairgap-it%2Fairgap-vault/lists"}