stealth address ให้คุณเผยแพร่ที่อยู่เดียว แต่ทุกการชำระเงินที่ส่งถึงคุณไปยังตำแหน่งใหม่บนเชน คู่มือนี้อธิบายวิธีทำงาน หน้าที่ของ view key และ spend key และวิธีที่กระเป๋าเงินหาเงินเข้าของตัวเอง โดยใช้ Blocknet เป็นตัวอย่าง
stealth address คืออะไร?
stealth address คือที่อยู่สาธารณะที่ไม่เคยปรากฏบนบล็อกเชน ประกอบด้วยคีย์สาธารณะสองคีย์ คือ spend key และ view key สำหรับแต่ละการชำระเงิน กระเป๋าเงินผู้ส่งรวมคีย์เหล่านี้กับตัวเลขสุ่มใหม่เพื่อสร้างที่อยู่แบบใช้ครั้งเดียวที่มีเพียงผู้รับระบุและใช้จ่ายได้
บนบัญชีสาธารณะ ที่อยู่ทั่วไปปรากฏในการชำระเงินทุกครั้งที่ได้รับ ที่อยู่ Bitcoin มาตรฐานทำงานแบบนี้ ใครรู้ที่อยู่ก็ค้นหาการชำระเงินแต่ละครั้งและรวมยอดได้ นี่คือเหตุผลที่กระเป๋าเงิน Bitcoin หลายตัวให้ที่อยู่ใหม่สำหรับแต่ละการชำระเงิน
stealth address ทำหน้าที่นั้นให้คุณ คุณแชร์ที่อยู่เดียวบนเว็บไซต์ โปรไฟล์ หรือเป็น @name แล้วผู้ส่งแต่ละรายสร้างที่อยู่ใช้ครั้งเดียวต่างกันจากมัน การชำระเงินสิบครั้งกลายเป็นสิบเอาต์พุตที่ไม่มีสิ่งใดเชื่อมโยงกันให้เห็น หรือเชื่อมกับที่อยู่ที่แชร์ ไม่ต้องสื่อสารโต้ตอบ ผู้ส่งคำนวณที่อยู่ใช้ครั้งเดียวเองจากที่อยู่สาธารณะของคุณและตัวเลขสุ่ม
stealth address มีที่มาอย่างไร?
การออกแบบที่อยู่ใช้ครั้งเดียวที่ Monero, Blocknet และเหรียญอื่นใช้ย้อนไปถึง whitepaper CryptoNote v2.0 ของ Nicolas van Saberhagen ลงวันที่ 17 ตุลาคม 2013 เอกสารเรียกแนวคิดนี้ว่า “การชำระเงินที่เชื่อมโยงกันไม่ได้” และอธิบายผู้ส่งที่สร้าง “คีย์สาธารณะแบบใช้ครั้งเดียว” จากที่อยู่ผู้รับ เอกสาร Monero อธิบาย stealth address ว่าให้ผู้ส่งสร้าง “ที่อยู่สุ่มแบบใช้ครั้งเดียวสำหรับทุกธุรกรรมในนามผู้รับ”
แนวคิดนี้แพร่ไปนอกกลุ่มเหรียญเพื่อความเป็นส่วนตัว แล้ว BIP 352 “Silent Payments” ของ Bitcoin ให้ที่อยู่ Bitcoin คงที่รับเงินที่เชื่อมโยงกันบนเชนไม่ได้ และ ERC-5564 ของ Ethereum ที่สร้างในปี 2022 กำหนดมาตรฐาน stealth address สำหรับบัญชี Ethereum ทั้งสองเป็นคุณสมบัติที่เลือกเปิดบนเชนเหล่านั้น แต่ใน Blocknet ทุกการชำระเงินใช้ที่อยู่แบบใช้ครั้งเดียว
stealth address ทำงานอย่างไร?
ผู้ส่งเลือกตัวเลขสุ่ม r เผยแพร่ R = r·G ในธุรกรรม และรวม r กับ view key สาธารณะของผู้รับเป็นความลับร่วม เมื่อนำความลับนั้นเพิ่มเข้ากับ spend key สาธารณะจะได้คีย์ใช้ครั้งเดียว ผู้รับสร้างความลับเดียวกันจาก R และ view key ส่วนตัว จึงมีเพียงผู้รับที่หาเงินเข้านั้นได้
กระเป๋าเงินของคุณมีคีย์สองคู่ คีย์ส่วนตัวแต่ละคีย์เป็นตัวเลขลับ (s สำหรับใช้จ่าย v สำหรับดู) และคีย์สาธารณะคือตัวเลขนั้นคูณจุดคงที่ G บนเส้นโค้ง ที่อยู่ของคุณก็คือคีย์สาธารณะสองคีย์ S และ V การแลกเปลี่ยนทั้งหมดเป็นดังนี้:
Receiver publishes: S = s·G and V = v·G
Sender picks r: R = r·G (stored in the transaction)
One-time key: P = H(r·V)·G + S
Receiver checks: H(v·R)·G + S == P (true because r·V = v·R)
Key to spend it: x = H(v·R) + s (so P = x·G)
หัวใจคือการแลกเปลี่ยน Diffie-Hellman ผู้ส่งคำนวณ r·V และผู้รับคำนวณ v·R ทั้งคู่ได้จุดเดียวกันเพราะแต่ละค่าเท่ากับ r·v·G ไม่มีใครอื่นรู้ r หรือ v จึงคำนวณไม่ได้ การแฮชจุดนั้น (H) ให้ความลับร่วม และคีย์ใช้ครั้งเดียว P คือความลับนั้นในรูปจุด บวกกับ spend key สาธารณะของคุณ
ตอนสแกน คุณคำนวณความลับใหม่จาก R และ view key ส่วนตัว แล้วตรวจว่าได้ P หรือไม่ ถ้าใช่ เอาต์พุตนั้นเป็นของคุณ เมื่อต้องการใช้จ่าย กระเป๋าเงินเพิ่มความลับเดียวกันเข้ากับ spend key ส่วนตัว ได้คีย์ส่วนตัว x สำหรับเอาต์พุตนั้นหนึ่งรายการ
Blocknet ใช้การออกแบบนี้บนกลุ่ม Ristretto ของ Curve25519 แฮชด้วย SHA-256 ภายใต้แท็กโดเมนเฉพาะ Blocknet และผสมตำแหน่งของแต่ละเอาต์พุตในธุรกรรมเข้าในแฮชด้วย ดังนั้นสองเอาต์พุตถึงคนเดียวกันในธุรกรรมเดียวก็ยังได้คีย์ที่ไม่เกี่ยวกัน ความลับร่วมเดียวกันยังสร้างค่าปิดบังจำนวนเงินของเอาต์พุตและคีย์เข้ารหัสเมโม ทำให้ผู้รับอ่านทั้งสองได้
view key และ spend key ทำหน้าที่อะไร?
การแยกคีย์ให้สิทธิ์เข้าถึงสองระดับ:
- view key ส่วนตัวหาเงินเข้า ด้วย v และ spend key สาธารณะ กระเป๋าเงินระบุทุกเอาต์พุตที่ส่งถึงคุณ ถอดรหัสจำนวนเงิน และอ่านเมโมได้
- spend key ส่วนตัวใช้จ่ายเงินนั้น มีเพียง s ที่เปลี่ยนเอาต์พุตที่พบเป็นคีย์ส่วนตัว x ซึ่งลงนามใช้จ่ายได้
การแยกนี้ทำให้มีกระเป๋าเงินแบบดูอย่างเดียว ในกระเป๋าเงินบรรทัดคำสั่ง Blocknet คำสั่ง viewkeys สร้างไฟล์กระเป๋าเงินแยกจากคีย์สำหรับดูของคุณ คำอธิบายระบุว่าไฟล์ “ติดตามได้แต่ใช้จ่ายไม่ได้” เหมาะเมื่อ “ต้องการดูอย่างเดียวจากอีกเครื่อง” เมื่อเรียกใช้ กระเป๋าเงินอธิบายสิ่งที่จะสร้าง:
# View Keys
This will create a view-only wallet that can monitor incoming
funds but CANNOT spend. Anyone with this file can see your
balance and transaction history.
มอบกระเป๋าเงินแบบดูอย่างเดียวให้เฉพาะผู้ที่คุณยอมให้ดูประวัติ เช่นนักบัญชี หรือเก็บบนคอมพิวเตอร์เครื่องที่สองของคุณ ไม่ว่าแบบใดก็เฝ้าดูเงินเข้าได้ ขณะที่ spend key อยู่บนเครื่องที่คุณไว้ใจ
กระเป๋าเงินหาเงินเข้าของตัวเองอย่างไร?
เพราะคีย์ใช้ครั้งเดียวดูไม่เกี่ยวกับที่อยู่ จึงไม่มีสิ่งใดบนเชนติดป้ายว่าเอาต์พุตใดเป็นของคุณ กระเป๋าเงินตรวจเอง สำหรับทุกธุรกรรมในบล็อกใหม่ทุกบล็อก โปรแกรมนำ R มาคำนวณความลับร่วมด้วย view key ส่วนตัว แล้วทดสอบแต่ละเอาต์พุตกับสูตรด้านบน นี่คือสิ่งที่กระเป๋าเงินทำขณะซิงก์
ตัวสแกนของ Blocknet ทำให้ขั้นตอนนี้รวดเร็ว ขั้นตอนที่ใช้ทรัพยากรมากคือคูณ R ด้วย view key ซึ่งทำครั้งเดียวต่อธุรกรรม แล้วตรวจทุกเอาต์พุตในธุรกรรมนั้นกับผลลัพธ์ เมื่อพบเอาต์พุตตรงกัน กระเป๋าเงินถอดรหัสจำนวนเงินและตรวจเทียบ Pedersen commitment ของเอาต์พุตก่อนเพิ่มในยอดคงเหลือ
การสแกนยังทำให้กู้คืนง่าย คีย์ทั้งสองคู่ของ Blocknet มาจากวลีกู้คืน 12 คำ ดังนั้นการกู้ seed บนเครื่องใหม่สร้างคีย์เดิม และกระเป๋าเงินสแกนเชนใหม่เพื่อหาทุกเอาต์พุตของคุณ คู่มือกระเป๋าเงิน Blocknet แสดงวิธีสำรอง seed และกู้คืน
stealth address ใน Blocknet
ใน Blocknet นั้น stealth address ก็คือที่อยู่ของคุณ เป็นการเข้ารหัส base58 ของ spend key สาธารณะ view key สาธารณะ และเช็กซัม 4 ไบต์ รวมเป็น 92 หรือ 93 ตัวอักษร ทุกการชำระเงินถึงคุณใช้ระบบนี้เพราะรูปแบบธุรกรรมไม่มีโหมดโปร่งใส รางวัลบล็อกก็ไปยังคีย์ใช้ครั้งเดียว เอาต์พุต coinbase ของนักขุดเดี่ยวจึงพบด้วยการสแกนเดียวกัน
stealth address ทำงานร่วมกับความเป็นส่วนตัวส่วนอื่นของ Blocknet วง 16 เอาต์พุต ซ่อนว่าใช้จ่ายจากเอาต์พุตใด commitment ซ่อนจำนวนเงิน และ Dandelion++ ซ่อนจุดที่ธุรกรรมเข้าสู่เครือข่าย คู่มือความเป็นส่วนตัวของ Blocknet อธิบายแต่ละชั้น
ยังใช้กับชื่อได้ด้วย ชื่อสั้น Blocknet ID เช่น @yourname ผูกกับที่อยู่แบบสาธารณะ ผู้ส่งจึงค้นหาที่ blocknet.id ได้ ตัวการชำระเงินยังไปยังคีย์ใช้ครั้งเดียวใหม่ ชื่อของคุณจึงไม่แสดงสิ่งที่คุณได้รับ
ชื่อสั้นจึงเป็นที่อยู่รับเงินขุดที่สะดวก เริ่ม seine ป้อนที่อยู่หรือ @yourname ที่พรอมป์ต์ แล้วใช้พูลเริ่มต้น bntpool.com คู่มือขุด ครอบคลุมส่วนที่เหลือ และกระเป๋าเงินจะพบ BNT ที่คุณได้รับด้วยการสแกน view key แบบเดียวกับที่อธิบายข้างต้น
คำถามที่พบบ่อย
stealth address เหมือนที่อยู่แบบใช้ครั้งเดียวหรือไม่?
ทั้งสองเป็นคนละส่วนของระบบเดียวกัน stealth address คือที่อยู่ที่คุณเผยแพร่ ประกอบด้วย spend key สาธารณะและ view key สาธารณะ ส่วนที่อยู่แบบใช้ครั้งเดียวคือคีย์ใหม่ที่ผู้ส่งสร้างจากที่อยู่นั้นสำหรับการจ่ายครั้งเดียว มีเพียงที่อยู่แบบใช้ครั้งเดียวปรากฏบนเชน ที่อยู่ที่คุณเผยแพร่ไม่เคยปรากฏ
คนอื่นเห็นยอดคงเหลือได้หรือไม่ถ้ารู้ stealth address ของฉัน?
ไม่ได้ การรู้ที่อยู่ที่เผยแพร่ไม่ทำให้หาเงินเข้าของคุณได้ เพราะแต่ละรายการอยู่บนคีย์ใช้ครั้งเดียวที่ดูไม่เกี่ยวกับที่อยู่นั้น การค้นหาต้องใช้ view key ส่วนตัว มีเพียงกระเป๋าเงินของคุณที่แสดงสิ่งที่ได้รับได้ ใน Blocknet จำนวนเงินก็ซ่อนด้วย แม้แต่เอาต์พุตเองจึงไม่แสดงมูลค่า
ผู้ที่มี view key ส่วนตัวของฉันทำอะไรได้?
view key ส่วนตัวให้ผู้ถือหาเงินที่ส่งถึงคุณและอ่านจำนวนเงินกับเมโมได้ แต่ใช้จ่ายไม่ได้เพราะต้องใช้ spend key ส่วนตัว ใน Blocknet คำสั่ง viewkeys นำคีย์สำหรับดูมาสร้างกระเป๋าเงินแบบดูอย่างเดียว เหมาะกับการติดตามเงินบนคอมพิวเตอร์เครื่องที่สอง แชร์เฉพาะกับคนที่คุณไว้ใจ
ต้องเปิด stealth address ใน Blocknet หรือไม่?
ไม่ต้อง ทุกการชำระเงินของ Blocknet ไปยัง stealth address แบบใช้ครั้งเดียวอัตโนมัติ เพราะรูปแบบธุรกรรมไม่มีโหมดโปร่งใส กระเป๋าเงินสร้างคีย์ใช้ครั้งเดียวตอนส่ง และหาเงินเข้าด้วย view key ตอนซิงก์ ไม่ต้องตั้งค่า ไม่ว่าจะจ่ายไปยังที่อยู่หรือ @name