An open API service indexing awesome lists of open source software.

https://github.com/number571/hidden-lake

🛡️ Anonymous F2F network based on the QB-problem & GP/12 protocol stack. Uses post-quantum cryptographic algorithms: ML-KEM, ML-DSA
https://github.com/number571/hidden-lake

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

Last synced: about 2 months ago
JSON representation

🛡️ Anonymous F2F network based on the QB-problem & GP/12 protocol stack. Uses post-quantum cryptographic algorithms: ML-KEM, ML-DSA

Awesome Lists containing this project

README

        

hl_logo.png




Theoretically Provable Anonymous Network




Go


Release


License


Build


Coverage


GoDoc


Go-Peer




GoReportCard


Activity


Commits


Code Lines


CodeSize


Downloads




Awesome-Decentralized


Alternative-Internet


Awesome-Anonymity


VKontakte


Telegram


About project

> [!IMPORTANT]
> 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.

The `Hidden Lake` is an anonymous network built on a `micro-service` architecture. At the heart of HL is the core - `HLS` (service), which generates anonymizing traffic and combines many other services (for example, `HLF` and `HLM`). 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.

## Coverage map

coverage_treemap.svg

## Releases

All 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").

## Dependencies

1. Go library [github.com/number571/go-peer](https://github.com/number571/go-peer "go-peer") (used by `cmd/hls`)
2. Go library [golang.org/x/net](https://golang.org/x/net "x/net") (used by `cmd/hlm`)
3. CSS/JS library [getbootstrap.com](https://getbootstrap.com "bootstrap") (used by `cmd/hlm,cmd/hlf`)

### Makefile

There 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:

1. golangci-lint [github.com/golangci/golangci-lint/cmd/golangci-lintv1.60.0](https://github.com/golangci/golangci-lint/tree/v1.60.0)
2. go-cover-treemap [github.com/nikolaydubina/[email protected]](https://github.com/nikolaydubina/go-cover-treemap/tree/v1.4.2)

## How it works

The Hidden Lake assigns the task of anonymity to the `QB-problem` (queue based).

Actions within the QB-problem
Figure QB-network with three nodes


  1. Each message m is encrypted with the recipient's key k: c = Ek(m)

  2. Message c is sent during period = T to all network participants

  3. The period T of one participant is independent of the periods T1, T2, ..., Tn of other participants

  4. If there is no message for the period T, then a false message v is sent to the network without a recipient (with a random key r): c = Er(v)

  5. Each participant tries to decrypt the message they received from the network: m = Dk(c)

----------------------------------------------------------------


hl_qbp.png

----------------------------------------------------------------

> More information about Hidden Lake and QB-problem in research paper: [hidden_lake_anonymous_network.pdf](docs/hidden_lake_anonymous_network.pdf)

## List of applications

1. Basic:
* [HLS](cmd/hls) - anonymizes traffic using the QB-problem
* [HLC](cmd/hlc) - runs many HL services as one application
* [HLA](cmd/hla) - adapts HL traffic to external environments
2. Applied:
* [HLM](cmd/hlm) - messenger with a web interface
* [HLF](cmd/hlf) - file sharing with a web interface
* [HLR](cmd/hlr) - executes remote access commands
* [HLP](cmd/hlp) - ping the node to check the online status

## Build and run

Launching an anonymous network is primarily the launch of an anonymizing HLS and HLA=tcp services. Simultaneous launch of these services can be performed using the `HLC` application. There are two ways to run HLC: through `source code`, and through the `release version`.

### 1. Running from source code

```bash
$ go install github.com/number571/hidden-lake/cmd/hlc@latest
$ hlc
```

### 2. Running from release version

```bash
$ wget https://github.com/number571/hidden-lake/releases/latest/download/hlc_amd64_linux
$ chmod +x hlc_amd64_linux
$ ./hlc_amd64_linux
```

## Production

The HLS 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.

```bash
$ hlc --network oi4r9NW9Le7fKF9d
```

hls_logger.gif

After such a launch, the hls.yml, hla_tcp.yml files will be created or overwritten (if it existed). The `settings` (hls.yml, hla_tcp.yml) and `connections` (hla_tcp.yml) fields will be substituted in it. When overwriting a file, only the above fields will be changed. The remaining fields of the `friends`, `services`, `address`, etc. type will not be overwritten.

> Examples of running HL apps in a prod environment: [echo_service](examples/echo_service/prod_test), [messenger](examples/messenger/prod_test), [filesharer](examples/filesharer/prod_test).

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=number571/hidden-lake&type=Date)](https://star-history.com/#number571/hidden-lake&Date)

## License

Licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.

**[⬆ back to top](#releases)**