<div>Good morning list,<br></div><div><br></div><div>During the summit, it was asked about an actual application problem for vending machines without any secret keys (so that hackers of vending machines cannot steal money from the machine).<br></div><div><br></div><div>It was quite very satisfactorily solved by one of us, and I thought it would best shared and recorded for posterity (as it was not recorded in the wiki).<br></div><div><br></div><div>The problem:<br></div><div><br></div><div>1.&nbsp; There exists a vending machine which must be offline and not contain any secret keys, in order to prevent theft from the machine.<br></div><div>&nbsp;&nbsp;&nbsp; As the machine is not under direct control of the owner of the machine, it is better if the attack surface is reduced.<br></div><div>2.&nbsp; The owner of the vending machine (who is selling the product) has a separate, probably singular, Lightning node to receive payments.<br></div><div><br></div><div>The solution:<br></div><div><br></div><div>1.&nbsp; Each vending machine contains a fixed number of hashes, as well as invoice signatures (signed by the owner Lightning node) corresponding to each hash.<br></div><div>&nbsp;&nbsp;&nbsp; The number of hashes must at least equal the number of product for sale.<br></div><div>&nbsp;&nbsp;&nbsp; The description of the product as well as the invoice price is fixed (after all, Bitcoin must be our unit of account).<br></div><div>&nbsp;&nbsp;&nbsp; (for vending machines supporting multiple product types, simply multiply this table by the number of different product types)<br></div><div>2.&nbsp; Each hash has a 1-bit flag, initially 0.<br></div><div>&nbsp;&nbsp;&nbsp; This flag is set to 1 when the hash has been claimed.<br></div><div>3.&nbsp; When a customer requests to purchase a product, the machine searches for a hash whose flag is 0.<br></div><div>&nbsp;&nbsp;&nbsp; It generates the invoice (concatenating the description and price, and filling in the payment hash and invoice signature) and gives to customer.<br></div><div>4.&nbsp; The customer pays as normal.<br></div><div>&nbsp;&nbsp;&nbsp; The vending machine owner node receives this payment and releases the preimage as proof-of-payment.<br></div><div>5.&nbsp; The customer gives the preimage to the machine, via QR code or via short-range radio technology such as bluetooth or NFC.<br></div><div>6.&nbsp; The machine checks the preimage, computes it hash, and checks if it is in the list of hashes.<br></div><div>&nbsp;&nbsp; If so, and the claim flag is not set, it sets the flag and releases the product.<br></div><div>&nbsp;&nbsp; OPEN PROBLEM: If product release fails due to mechanical failure, there is no way to easily refund the payment.<br></div><div>7.&nbsp; When replenishing the supply of product to the vending machine, the supply of hashes can also be replenished by the owner of the vending machine also.<br></div><div><br></div><div>Regards,<br></div><div>ZmnSCPxj<br></div>