Resources on Lightning privacy

Receiver privacy with LNproxy

  • lnproxy takes a bolt 11 invoice and generates a โ€œwrappedโ€ invoice that can be settled if and only if the original invoice is settled. The โ€œwrappedโ€ invoice has the same payment hash, expiry, and description, as the invoice it wraps but adds a small routing fee to the amount. The โ€œwrappedโ€ invoice can be used anywhere the original invoice would be used to trustlessly hide the destination of a payment.

  • use the API in your .bashrc (available in the Raspiblitz v1.9.0 and above with a CLI shortcut as well):

    function lnproxy() {
      echo
      echo "Requesting a wrapped invoice from http://rdq6tvulanl7aqtupmoboyk2z3suzkdwurejwyjyjf4itr3zhxrm2lad.onion ..."
      echo
      torify curl http://rdq6tvulanl7aqtupmoboyk2z3suzkdwurejwyjyjf4itr3zhxrm2lad.onion/api/${1}
    }
  • Code and how to run yourself: https://github.com/lnproxy

  • Improved alias verifying the payment hash: https://github.com/lnproxy/lnproxy-cli

Unannounced channels - shadow liquidity

  • use parallel private channels to hide capacity and UTXOs

  • https://eprint.iacr.org/2021/384.pdf

    To hide public channel balances, a node may open unannounced channels in parallel to announced ones. Depending on the relation between the balances of announced and unannounced channels, the attacker may still be able to discover unannounced channel balances (e.g., if the balance of the unannounced channel exceeds the balances of announced channels). Even in that case, the standard probing technique needs to be modified

Open channels with improved privacy

Manual

  • create channels from coinjoin outputs

    • private channels are not announced, use them especially if there is a public channel to the peer already

    • open one channel at a time

    • create no change

    • avoid round amounts

  • close cooperatively to an external address (eg a Joinmarket wallet running as a Maker))

  • Creating a Core Lightning channel funded by JoinMarket: https://gist.github.com/BitcoinWukong/0c04d9186251b0a6497fef3737e95ceb

  • syntax for LND with Balance of Satoshis:

    bos open PUBKEY --amount SATS --coop-close-address EXTERNAL_ADDRESS --type private --external-funding

Mutiny wallet

LN-vortex

Nolooking

LN wallets

Mobile wallets (LN node on the phone)

Tor support and private chain info

  • OBW - Tor + Electrum server support

    • optional custodial hosted channels support - payments are private from the provider

  • Breez - Tor and neutrino backend

  • Blixt - Neutrino block source

Custodial wallets

Traditional custodians provide no privacy from the maintainer.

  • Wallet of Satoshi

  • Bitcoin Beach Wallet (phone number required)

  • CoinOS (Liquid compatible LN <-> Liquid gateway)

LN compatible chaumian (blinded) mints

LN protocol improvements

Attacks

Channel jamming

LNsploit

Probing

Reading list

Onion routing

  • BOLT #4: Onion Routing Protocol https://github.com/lightning/bolts/blob/master/04-onion-routing.md https://github.com/ellemouton/onion/blob/master/docs/onionRouting.pdf

  • Route Blinding proposal https://github.com/lightning/bolts/blob/route-blinding/proposals/route-blinding.md https://github.com/ellemouton/onion/blob/master/docs/routeBlinding.pdf

  • CLI tool for constructing & peeling onions both with and without route blinding. https://github.com/ellemouton/onion

Listening and videos

Last updated