{"id":17594755,"url":"https://github.com/number571/hidden-lake","last_synced_at":"2026-02-17T01:13:07.592Z","repository":{"id":45481396,"uuid":"169630039","full_name":"number571/hidden-lake","owner":"number571","description":"🛡️ Anonymous F2F network based on the QB-problem \u0026 GP/12 protocol stack. Uses post-quantum cryptographic algorithms: ML-KEM, ML-DSA","archived":false,"fork":false,"pushed_at":"2025-10-31T04:34:34.000Z","size":87450,"stargazers_count":160,"open_issues_count":7,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-10-31T06:26:15.745Z","etag":null,"topics":["anonymity","anonymous","cryptography","decentralized","e2e-encryption","f2f","file-sharing","friend-to-friend","go","golang","gp12","hidden-lake","messenger","network","p2p","peer-to-peer","post-quantum","privacy","qb-nets","remote-access-tool"],"latest_commit_sha":null,"homepage":"https://github.com/number571/go-peer","language":"Go","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/number571.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2019-02-07T19:33:25.000Z","updated_at":"2025-10-27T14:52:45.000Z","dependencies_parsed_at":"2024-06-18T23:00:47.422Z","dependency_job_id":"6a7ab094-0969-4c13-ac18-804df7fd77e0","html_url":"https://github.com/number571/hidden-lake","commit_stats":{"total_commits":110,"total_committers":6,"mean_commits":"18.333333333333332","dds":0.6727272727272727,"last_synced_commit":"6ee2b8568fac243fccd7fb935e18388217d86738"},"previous_names":["number571/hiddenlake"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/number571/hidden-lake","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/number571%2Fhidden-lake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/number571%2Fhidden-lake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/number571%2Fhidden-lake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/number571%2Fhidden-lake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/number571","download_url":"https://codeload.github.com/number571/hidden-lake/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/number571%2Fhidden-lake/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27739533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["anonymity","anonymous","cryptography","decentralized","e2e-encryption","f2f","file-sharing","friend-to-friend","go","golang","gp12","hidden-lake","messenger","network","p2p","peer-to-peer","post-quantum","privacy","qb-nets","remote-access-tool"],"created_at":"2024-10-22T07:08:18.928Z","updated_at":"2026-02-17T01:13:07.580Z","avatar_url":"https://github.com/number571.png","language":"Go","funding_links":[],"categories":["Problems"],"sub_categories":["4. QB (queue based problem)"],"readme":"\u003cimg src=\"images/hl_logo.png\" alt=\"hl_logo.png\"/\u003e\n\n\u003ch2\u003e\n\t\u003cp align=\"center\"\u003e\n    \t\u003cstrong\u003e\n        \tTheoretically Provable Anonymous Network\n   \t\t\u003c/strong\u003e\n\t\u003c/p\u003e\n\t\u003cp align=\"center\"\u003e\n        \u003ca href=\"https://github.com/topics/golang\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/go-mod/go-version/number571/hidden-lake\" alt=\"Go\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/hidden-lake/releases\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/v/release/number571/hidden-lake.svg\" alt=\"Release\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/hidden-lake/blob/master/LICENSE\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/license/number571/hidden-lake.svg\" alt=\"License\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/hidden-lake/actions\"\u003e\n        \t\u003cimg src=\"https://github.com/number571/hidden-lake/actions/workflows/build.yml/badge.svg\" alt=\"Build\" /\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/number571/hidden-lake/blob/629bbca6e6bed8961175e8722efb62e575343971/Makefile#L76\"\u003e\n        \t\u003cimg src=\"test/result/badge_coverage.svg\" alt=\"Coverage\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://pkg.go.dev/github.com/number571/hidden-lake?status.svg\"\u003e\n        \t\u003cimg src=\"https://godoc.org/github.com/number571/hidden-lake?status.svg\" alt=\"GoDoc\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/go-peer\"\u003e\n        \t\u003cimg src=\"https://raw.githubusercontent.com/number571/go-peer/refs/heads/master/images/go-peer_badge.svg\" alt=\"Go-Peer\" /\u003e\n\t\t\u003c/a\u003e\n\t\u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://goreportcard.com/report/github.com/number571/hidden-lake\"\u003e\n        \t\u003cimg src=\"https://goreportcard.com/badge/github.com/number571/hidden-lake\" alt=\"GoReportCard\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/hidden-lake/pulse\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/commit-activity/m/number571/hidden-lake\" alt=\"Activity\" /\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/number571/hidden-lake/commits/master\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/last-commit/number571/hidden-lake.svg\" alt=\"Commits\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/number571/hidden-lake/blob/b27339aa283eb137e680a9ca6a04391e7960510a/Makefile#L107\"\u003e\n        \t\u003cimg src=\"test/result/badge_codelines.svg\" alt=\"Code Lines\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://img.shields.io/github/languages/code-size/number571/hidden-lake.svg\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/languages/code-size/number571/hidden-lake.svg\" alt=\"CodeSize\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://img.shields.io/github/downloads/number571/hidden-lake/total.svg\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/github/downloads/number571/hidden-lake/total.svg\" alt=\"Downloads\" /\u003e\n\t\t\u003c/a\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://github.com/croqaz/awesome-decentralized\"\u003e\n        \t\u003cimg src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Awesome-Decentralized\" /\u003e\n\t\t\u003c/a\u003e\n        \u003ca href=\"https://github.com/redecentralize/alternative-internet\"\u003e\n        \t\u003cimg src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Alternative-Internet\" /\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/number571/awesome-anonymity\"\u003e\n        \t\u003cimg src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Awesome-Anonymity\" /\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://vk.me/join/6Px6b0Qh/uZIK4ixUYWQm4Krepzq5xbYjYw=\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/badge/вконтакте-%232E87FB.svg?\u0026style=for-the-badge\u0026logo=vk\u0026logoColor=white\" alt=\"VKontakte\" /\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://t.me/+9Kcxr8NyeU8zZDZi\"\u003e\n        \t\u003cimg src=\"https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge\u0026logo=telegram\u0026logoColor=white\" alt=\"Telegram\" /\u003e\n\t\t\u003c/a\u003e\n    \u003c/p\u003e\n\tAbout project\n\u003c/h2\u003e\n\n\u003e [!IMPORTANT]\n\u003e The project is being actively developed, the implementation of some details may change over time. More information about the changes can be obtained from the [CHANGELOG.md](CHANGELOG.md) file.\n\nThe `Hidden Lake` is an anonymous network built on a `micro-service` architecture. At the heart of HL is the core - `HLK` (service), which generates anonymizing (queue based) traffic and combines many other services (`HLS=filesharer`, `HLS=messenger`, `HLS=pinger` and etc). Thus, Hidden Lake is not a whole and monolithic solution, but a composition of several combined services. The HL is a `friend-to-friend` (F2F) network, which means building trusted communications. Due to this approach, members of the HL network can avoid `spam` in their direction, as well as `possible attacks` if vulnerabilities are found in the code.\n\n## Coverage map\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"100%\" src=\"test/result/coverage_treemap.svg\" alt=\"coverage_treemap.svg\"/\u003e\u003c/p\u003e\n\n## Releases\n\nAll cmd programs are compiled for {`amd64`, `arm64`} ARCH and {`windows`, `linux`, `darwin`} OS as pattern = `appname_arch_os`. In total, one application is compiled into six versions. The entire list of releases can be found here: [github.com/number571/hidden-lake/releases](https://github.com/number571/hidden-lake/releases \"releases\"). \n\n## Dependencies\n\n1. Go library [github.com/number571/go-peer](https://github.com/number571/go-peer \"go-peer\") (used by `cmd/hlk`)\n\n### Makefile\n\nThere are a number of dependencies that represent separate applications for providing additional information about the quality of the code. These applications are not entered into the project, but are loaded via the `make install-deps` command. The list of applications is as follows:\n\n1. golangci-lint [github.com/golangci/golangci-lint@v2.1.2](https://github.com/golangci/golangci-lint/tree/v2.1.2)\n2. go-cover-treemap [github.com/nikolaydubina/go-cover-treemap@v1.4.2](https://github.com/nikolaydubina/go-cover-treemap/tree/v1.4.2)\n\n## How it works\n\nThe Hidden Lake assigns the task of anonymity to the `QB-problem` (queue based).\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003cth\u003eActions within the QB-problem\u003c/th\u003e\n  \u003cth\u003eFigure QB-network with three nodes\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\t\u003col\u003e\n\t  \u003cli\u003eEach message \u003cb\u003em\u003c/b\u003e is encrypted with the recipient's key \u003cb\u003ek\u003c/b\u003e: \u003cb\u003ec = Ek(m)\u003c/b\u003e\u003c/li\u003e\n\t  \u003cli\u003eMessage \u003cb\u003ec\u003c/b\u003e is sent during period \u003cb\u003e= T\u003c/b\u003e to all network participants\u003c/li\u003e\n\t  \u003cli\u003eThe period \u003cb\u003eT\u003c/b\u003e of one participant is independent of the periods \u003cb\u003eT1, T2, ..., Tn\u003c/b\u003e of other participants\u003c/li\u003e\n\t  \u003cli\u003eIf there is no message for the period \u003cb\u003eT\u003c/b\u003e, then a false message \u003cb\u003ev\u003c/b\u003e is sent to the network without a recipient (with a random key \u003cb\u003er\u003c/b\u003e): \u003cb\u003ec = Er(v)\u003c/b\u003e\u003c/li\u003e\n\t  \u003cli\u003eEach participant tries to decrypt the message they received from the network: \u003cb\u003em = Dk(c)\u003c/li\u003e\n\t\u003c/ol\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\t\u003cp align=\"left\"\u003e----------------------------------------------------------------\u003c/p\u003e\n\t\u003cimg src=\"images/hl_qbp.png\" alt=\"hl_qbp.png\"/\u003e\n\t\u003cp align=\"right\"\u003e----------------------------------------------------------------\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e More information about Hidden Lake and QB-problem in research paper: [hidden_lake_anonymous_network.pdf](docs/hidden_lake_anonymous_network.pdf)\n\n## List of applications\n\n1. Basic:\n   * [HLK](cmd/hlk) - anonymizes traffic using the QB-problem\n   * [HLC](cmd/hlc) - runs many HL applications as one application\n2. Adapters:\n   * [HLA=tcp](cmd/hla/hla-tcp) - adapts HL traffic over TCP protocol\n   * [HLA=http](cmd/hla/hla-http) - adapts HL traffic over HTTP ptotocol\n3. Services:\n   * [HLS=messenger](cmd/hls/hls-messenger) - send and recv text messages\n   * [HLS=filesharer](cmd/hls/hls-filesharer) - view storage and download files \n   * [HLS=pinger](cmd/hls/hls-pinger) - ping the node to check online status\n\n### External applications\n\n1. [HL-Client](https://github.com/number571/hl-client) - client for «Hidden Lake» network written in Go \u0026amp; Fyne\n2. [HL-Chat](https://github.com/number571/hl-chat) - console group chat based on «Hidden Lake» network\n\n## Build and run\n\n\u003e [!IMPORTANT]\n\u003e As an additional level of security, it is recommended to run the Hidden Lake anonymous network in a virtual machine. This will make it possible to secure the main execution environment if vulnerabilities are found in HL, and it will also hide the operation/interaction of HL services from the main execution environment.\n\nLaunching an anonymous network is primarily the launch of an anonymizing `HLK` and `HLA=tcp` services. Simultaneous launch of these services can be performed using the `HLC` application. You can edit the list of running services using the `hlc.yml` file. There are two ways to run HLC: through `source code`, and through the `release version`. \n\n### 1. Running from source code\n\n```bash\n$ go install github.com/number571/hidden-lake/cmd/hlc@latest\n$ hlc\n```\n\n### 2. Running from release version\n\n```bash\n$ wget https://github.com/number571/hidden-lake/releases/latest/download/hlc_amd64_linux\n$ chmod +x hlc_amd64_linux\n$ ./hlc_amd64_linux\n```\n\n## Production\n\nThe HLK node is easily connected to the production environment throw HLA=tcp. To do this, you just need to specify the `network` at startup. You can find them in the [networks.yml](build/networks.yml) file. \n\n```bash\n$ hlc --network oi4r9NW9Le7fKF9d\n```\n\nYou can also create your own networks by copying the contents of the networks.yml file to the execution directory with the renamed name `hl-networks.yml`. Further, the contents of this file can be overwritten or supplemented.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"cmd/hlk/images/hlk_logger.gif\" alt=\"hlk_logger.gif\"/\u003e\u003c/p\u003e\n\n## Communication\n\nTo communicate with other network nodes, you must first obtain your public key, which was generated for the first time when launching HLK. To do this, you need to access the [HLK API](cmd/hlk/README.md#hlk-api) at the `internal` address provided in `hlk.yml` (by default `localhost:9572`).\n\n```bash\n$ curl -X GET 'http://localhost:9572/api/profile/pubkey'\n```\n\nAfter receiving the public key, it must be transferred to the future interlocutor, as well as receive his own public key from him. Thus, an `F2F handshake` will occur, where each party will explicitly establish the public key of the interlocutor. To install the key of the interlocutor, you can also use the `HLK API` or just edit `hlk.yml` file with restart HLK application.\n\n```bash\n$ curl -X POST 'http://localhost:9572/api/config/friends' --data '{\"alias_name\":\"friend\", \"public_key\":\"PubKey{...}\"}'\n```\n\n__Success__. Now you can start communicating! You can write own applied services over `HLK/HLS API` or just use simple `CLI` applications, as example [hlk-cli](cmd/hlk/client/hlk-cli/), [hls-messenger-cli](cmd/hls/hls-messenger/client/hls-messenger-cli/), [hls-filesharer-cli](cmd/hls/hls-filesharer/client/hls-filesharer-cli/), [hls-pinger-cli](cmd/hls/hls-pinger/client/hls-pinger-cli/). \n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=number571/hidden-lake\u0026type=Date)](https://star-history.com/#number571/hidden-lake\u0026Date)\n\n## License\n\nLicensed under the MIT License. See [LICENSE](LICENSE) for the full license text.\n\n**[⬆ back to top](#releases)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumber571%2Fhidden-lake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnumber571%2Fhidden-lake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumber571%2Fhidden-lake/lists"}