CryptoNote เวอร์ชัน 2.0
El artículo presentado aquí es el whitepaper CryptoNote v2.0 de Nicolas van Saberhagen (2013), que describe los fundamentos criptográficos sobre los que se construye Monero. No es un whitepaper específico de Monero — Monero se lanzó en 2014 como una bifurcación de la implementación de referencia de CryptoNote (Bytecoin) y desde entonces ha evolucionado significativamente más allá del protocolo original.
Introduction
Introduction
"Bitcoin" [1] has been a successful implementation of the concept of p2p electronic cash. Both professionals and the general public have come to appreciate the convenient combination of public transactions and proof-of-work as a trust model. Today, the user base of electronic cash is growing at a steady pace; customers are attracted to low fees and the anonymity provided by electronic cash and merchants value its predicted and decentralized emission. Bitcoin has effectively proved that electronic cash can be as simple as paper money and as convenient as credit cards. Unfortunately, Bitcoin suffers from several deficiencies. For example, the system's distributed nature is inflexible, preventing the implementation of new features until almost all of the network users update their clients. Some critical flaws that cannot be fixed rapidly deter Bitcoin's widespread propagation. In such inflexible models, it is more efficient to roll-out a new project rather than perpetually fix the original project. In this paper, we study and propose solutions to the main deficiencies of Bitcoin. We believe that a system taking into account the solutions we propose will lead to a healthy competition among different electronic cash systems. We also propose our own electronic cash, "CryptoNote", a name emphasizing the next breakthrough in electronic cash.
การแนะนำ
“Bitcoin” [1] ประสบความสำเร็จในการนำแนวคิดเงินสดอิเล็กทรอนิกส์ p2p ไปใช้ ทั้งสองอย่าง มืออาชีพและประชาชนทั่วไปต่างก็ชื่นชมการผสมผสานที่สะดวกสบายของ ธุรกรรมสาธารณะและ proof-of-work เป็นรูปแบบความน่าเชื่อถือ ปัจจุบันฐานผู้ใช้เงินสดอิเล็กทรอนิกส์ กำลังเติบโตอย่างมั่นคง ลูกค้าถูกดึงดูดด้วยค่าธรรมเนียมต่ำและการไม่เปิดเผยตัวตน ด้วยเงินสดอิเล็กทรอนิกส์และร้านค้าให้ความสำคัญกับการปล่อยก๊าซเรือนกระจกที่คาดการณ์ไว้และกระจายอำนาจ Bitcoin มี ได้รับการพิสูจน์อย่างมีประสิทธิภาพว่าเงินสดอิเล็กทรอนิกส์สามารถทำได้ง่ายเหมือนกับเงินกระดาษและสะดวกพอ ๆ กับ บัตรเครดิต น่าเสียดายที่ Bitcoin ประสบกับข้อบกพร่องหลายประการ เช่น ระบบมีการกระจาย ธรรมชาติไม่สามารถยืดหยุ่นได้ ทำให้ไม่สามารถใช้งานคุณสมบัติใหม่ได้จนกว่าผู้ใช้เครือข่ายเกือบทั้งหมดจะอัปเดตไคลเอนต์ของตน ข้อบกพร่องที่สำคัญบางประการที่ไม่สามารถแก้ไขได้อย่างรวดเร็วจะขัดขวาง Bitcoin การแพร่กระจายอย่างกว้างขวาง ในโมเดลที่ไม่ยืดหยุ่นดังกล่าว การเปิดตัวโปรเจ็กต์ใหม่จะมีประสิทธิภาพมากกว่า แทนที่จะแก้ไขโครงการเดิมอย่างถาวร ในบทความนี้ เราศึกษาและเสนอวิธีแก้ปัญหาข้อบกพร่องหลักของ Bitcoin เราเชื่อ ว่าระบบที่คำนึงถึงแนวทางแก้ไขที่เราเสนอจะนำไปสู่การแข่งขันที่ดี ในระบบเงินสดอิเล็กทรอนิกส์ต่างๆ นอกจากนี้เรายังเสนอเงินสดอิเล็กทรอนิกส์ของเราเอง “CryptoNote” ชื่อที่เน้นความก้าวหน้าครั้งต่อไปในด้านเงินสดอิเล็กทรอนิกส์
Bitcoin Drawbacks and Possible Solutions
Bitcoin Drawbacks and Possible Solutions
2 Bitcoin drawbacks and some possible solutions 2.1 Traceability of transactions Privacy and anonymity are the most important aspects of electronic cash. Peer-to-peer payments seek to be concealed from third party’s view, a distinct difference when compared with traditional banking. In particular, T. Okamoto and K. Ohta described six criteria of ideal electronic cash, which included “privacy: relationship between the user and his purchases must be untraceable by anyone” [30]. From their description, we derived two properties which a fully anonymous electronic cash model must satisfy in order to comply with the requirements outlined by Okamoto and Ohta: Untraceability: for each incoming transaction all possible senders are equiprobable. Unlinkability: for any two outgoing transactions it is impossible to prove they were sent to the same person. Unfortunately, Bitcoin does not satisfy the untraceability requirement. Since all the transactions that take place between the network’s participants are public, any transaction can be 1 CryptoNote v 2.0 Nicolas van Saberhagen October 17, 2013 1 Introduction “Bitcoin” [1] has been a successful implementation of the concept of p2p electronic cash. Both professionals and the general public have come to appreciate the convenient combination of public transactions and proof-of-work as a trust model. Today, the user base of electronic cash is growing at a steady pace; customers are attracted to low fees and the anonymity provided by electronic cash and merchants value its predicted and decentralized emission. Bitcoin has effectively proved that electronic cash can be as simple as paper money and as convenient as credit cards. Unfortunately, Bitcoin suffers from several deficiencies. For example, the system’s distributed nature is inflexible, preventing the implementation of new features until almost all of the network users update their clients. Some critical flaws that cannot be fixed rapidly deter Bitcoin’s widespread propagation. In such inflexible models, it is more efficient to roll-out a new project rather than perpetually fix the original project. In this paper, we study and propose solutions to the main deficiencies of Bitcoin. We believe that a system taking into account the solutions we propose will lead to a healthy competition among different electronic cash systems. We also propose our own electronic cash, “CryptoNote”, a name emphasizing the next breakthrough in electronic cash. 2 Bitcoin drawbacks and some possible solutions 2.1 Traceability of transactions Privacy and anonymity are the most important aspects of electronic cash. Peer-to-peer payments seek to be concealed from third party’s view, a distinct difference when compared with traditional banking. In particular, T. Okamoto and K. Ohta described six criteria of ideal electronic cash, which included “privacy: relationship between the user and his purchases must be untraceable by anyone” [30]. From their description, we derived two properties which a fully anonymous electronic cash model must satisfy in order to comply with the requirements outlined by Okamoto and Ohta: Untraceability: for each incoming transaction all possible senders are equiprobable. Unlinkability: for any two outgoing transactions it is impossible to prove they were sent to the same person. Unfortunately, Bitcoin does not satisfy the untraceability requirement. Since all the transactions that take place between the network’s participants are public, any transaction can be 1 3 Bitcoin definitely fails "untraceability." When I send you BTC, the wallet from which it is sent is irrevocably stamped on the blockchain. There is no question about who sent those funds, because only the knower of the private keys can send them.
unambiguously traced to a unique origin and final recipient. Even if two participants exchange funds in an indirect way, a properly engineered path-finding method will reveal the origin and final recipient. It is also suspected that Bitcoin does not satisfy the second property. Some researchers stated ([33, 35, 29, 31]) that a careful blockchain analysis may reveal a connection between the users of the Bitcoin network and their transactions. Although a number of methods are disputed [25], it is suspected that a lot of hidden personal information can be extracted from the public database. Bitcoin’s failure to satisfy the two properties outlined above leads us to conclude that it is not an anonymous but a pseudo-anonymous electronic cash system. Users were quick to develop solutions to circumvent this shortcoming. Two direct solutions were “laundering services” [2] and the development of distributed methods [3, 4]. Both solutions are based on the idea of mixing several public transactions and sending them through some intermediary address; which in turn suffers the drawback of requiring a trusted third party. Recently, a more creative scheme was proposed by I. Miers et al. [28]: “Zerocoin”. Zerocoin utilizes a cryptographic one-way accumulators and zero-knoweldge proofs which permit users to “convert” bitcoins to zerocoins and spend them using anonymous proof of ownership instead of explicit public-key based digital signatures. However, such knowledge proofs have a constant but inconvenient size - about 30kb (based on today’s Bitcoin limits), which makes the proposal impractical. Authors admit that the protocol is unlikely to ever be accepted by the majority of Bitcoin users [5]. 2.2 The proof-of-work function Bitcoin creator Satoshi Nakamoto described the majority decision making algorithm as “oneCPU-one-vote” and used a CPU-bound pricing function (double SHA-256) for his proof-of-work scheme. Since users vote for the single history of transactions order [1], the reasonableness and consistency of this process are critical conditions for the whole system. The security of this model suffers from two drawbacks. First, it requires 51% of the network’s mining power to be under the control of honest users. Secondly, the system’s progress (bug fixes, security fixes, etc...) require the overwhelming majority of users to support and agree to the changes (this occurs when the users update their wallet software) [6].Finally this same voting mechanism is also used for collective polls about implementation of some features [7]. This permits us to conjecture the properties that must be satisfied by the proof-of-work pricing function. Such function must not enable a network participant to have a significant advantage over another participant; it requires a parity between common hardware and high cost of custom devices. From recent examples [8], we can see that the SHA-256 function used in the Bitcoin architecture does not posses this property as mining becomes more efficient on GPUs and ASIC devices when compared to high-end CPUs. Therefore, Bitcoin creates favourable conditions for a large gap between the voting power of participants as it violates the “one-CPU-one-vote” principle since GPU and ASIC owners posses a much larger voting power when compared with CPU owners. It is a classical example of the Pareto principle where 20% of a system’s participants control more than 80% of the votes. One could argue that such inequality is not relevant to the network’s security since it is not the small number of participants controlling the majority of the votes but the honesty of these participants that matters. However, such argument is somewhat flawed since it is rather the possibility of cheap specialized hardware appearing rather than the participants’ honesty which poses a threat. To demonstrate this, let us take the following example. Suppose a malevolent individual gains significant mining power by creating his own mining farm through the cheap 2 unambiguously traced to a unique origin and final recipient. Even if two participants exchange funds in an indirect way, a properly engineered path-finding method will reveal the origin and final recipient. It is also suspected that Bitcoin does not satisfy the second property. Some researchers stated ([33, 35, 29, 31]) that a careful blockchain analysis may reveal a connection between the users of the Bitcoin network and their transactions. Although a number of methods are disputed [25], it is suspected that a lot of hidden personal information can be extracted from the public database. Bitcoin’s failure to satisfy the two properties outlined above leads us to conclude that it is not an anonymous but a pseudo-anonymous electronic cash system. Users were quick to develop solutions to circumvent this shortcoming. Two direct solutions were “laundering services” [2] and the development of distributed methods [3, 4]. Both solutions are based on the idea of mixing several public transactions and sending them through some intermediary address; which in turn suffers the drawback of requiring a trusted third party. Recently, a more creative scheme was proposed by I. Miers et al. [28]: “Zerocoin”. Zerocoin utilizes a cryptographic one-way accumulators and zero-knoweldge proofs which permit users to “convert” bitcoins to zerocoins and spend them using anonymous proof of ownership instead of explicit public-key based digital signatures. However, such knowledge proofs have a constant but inconvenient size - about 30kb (based on today’s Bitcoin limits), which makes the proposal impractical. Authors admit that the protocol is unlikely to ever be accepted by the majority of Bitcoin users [5]. 2.2 The proof-of-work function Bitcoin creator Satoshi Nakamoto described the majority decision making algorithm as “oneCPU-one-vote” and used a CPU-bound pricing function (double SHA-256) for his proof-of-work scheme. Since users vote for the single history of transactions order [1], the reasonableness and consistency of this process are critical conditions for the whole system. The security of this model suffers from two drawbacks. First, it requires 51% of the network’s mining power to be under the control of honest users. Secondly, the system’s progress (bug fixes, security fixes, etc...) require the overwhelming majority of users to support and agree to the changes (this occurs when the users update their wallet software) [6].Finally this same voting mechanism is also used for collective polls about implementation of some features [7]. This permits us to conjecture the properties that must be satisfied by the proof-of-work pricing function. Such function must not enable a network participant to have a significant advantage over another participant; it requires a parity between common hardware and high cost of custom devices. From recent examples [8], we can see that the SHA-256 function used in the Bitcoin architecture does not posses this property as mining becomes more efficient on GPUs and ASIC devices when compared to high-end CPUs. Therefore, Bitcoin creates favourable conditions for a large gap between the voting power of participants as it violates the “one-CPU-one-vote” principle since GPU and ASIC owners posses a much larger voting power when compared with CPU owners. It is a classical example of the Pareto principle where 20% of a system’s participants control more than 80% of the votes. One could argue that such inequality is not relevant to the network’s security since it is not the small number of participants controlling the majority of the votes but the honesty of these participants that matters. However, such argument is somewhat flawed since it is rather the possibility of cheap specialized hardware appearing rather than the participants’ honesty which poses a threat. To demonstrate this, let us take the following example. Suppose a malevolent individual gains significant mining power by creating his own mining farm through the cheap 2 4 Presumably, if every user helps their own anonymity out by always generating a new address for EVERY received payment (which is absurd but technically the "correct" way to do it), and if every user helped out everyone else’s anonymity by insisting that they never send funds to the same BTC address twice, then Bitcoin would still only circumstantially pass the unlinkability test. Why? Consumer data can be used to figure an astonishing amount about people all the time. See, for example http://www.applieddatalabs.com/content/target-knows-it-shows Now, imagine this is 20 years in the future and further imagine that Target didn’t just know about your purchase habits at Target, but they had been mining the blockchain for ALL OF YOUR PERSONAL PURCHASES WITH YOUR COINBASE WALLET FOR THE PAST TWELVE YEARS. They’ll be like "hey buddy you might want to pick up some cough medicine tonight, you won’t feel well tomorrow." This may not be the case if multi-party sorting is exploited correctly. See, for example, this blog post: http://blog.ezyang.com/2012/07/secure-multiparty-bitcoin-anonymization/ I’m not totally convinced of the math on that, but ... one paper at a time, right? Citation needed. Whereas the Zerocoin protocol (standalone) may be insufficient, the Zerocash protocol seems to have implemented a 1kb sized transactions. That project is supported by the US and Israeli militaries, of course, so who knows about it’s robustness. On the other hand, no one wants to be able to spend funds without oversight more than the military. http://zerocash-project.org/ I’m not convinced... see, for example, http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_12.pdf Quoting a Cryptonote developer Maurice Planck (presumably a pseudonym) from the cryptonote fora: "Zerocoin, Zerocash. This is the most advanced technology, I must admit. Yes, the quote above is from the analysis of the previous version of the protocol. To my knowledge, it’s not 288, but 384 bytes, but anyway this is good news. They used a brand new technic called SNARK, which has certain downsides: for example, large initial database of public parameters required to create a signature (more than 1 GB) and significant time required to create a transaction (more than a minute). Finally, they’re using a young crypto, which I’ve mentioned to be an arguable idea: https://forum.cryptonote.org/viewtopic.php?f= " - Maurice P. Thu Apr 03, 2014 7:56 pm A function that is performed in the CPU and is not suitable for GPU, FPGA, or ASIC computation. The "puzzle" used in proof-of-work is referred to as the pricing function, cost function, or puzzle function.
unambiguously traced to a unique origin and final recipient. Even if two participants exchange funds in an indirect way, a properly engineered path-finding method will reveal the origin and final recipient. It is also suspected that Bitcoin does not satisfy the second property. Some researchers stated ([33, 35, 29, 31]) that a careful blockchain analysis may reveal a connection between the users of the Bitcoin network and their transactions. Although a number of methods are disputed [25], it is suspected that a lot of hidden personal information can be extracted from the public database. Bitcoin’s failure to satisfy the two properties outlined above leads us to conclude that it is not an anonymous but a pseudo-anonymous electronic cash system. Users were quick to develop solutions to circumvent this shortcoming. Two direct solutions were “laundering services” [2] and the development of distributed methods [3, 4]. Both solutions are based on the idea of mixing several public transactions and sending them through some intermediary address; which in turn suffers the drawback of requiring a trusted third party. Recently, a more creative scheme was proposed by I. Miers et al. [28]: “Zerocoin”. Zerocoin utilizes a cryptographic one-way accumulators and zero-knoweldge proofs which permit users to “convert” bitcoins to zerocoins and spend them using anonymous proof of ownership instead of explicit public-key based digital signatures. However, such knowledge proofs have a constant but inconvenient size - about 30kb (based on today’s Bitcoin limits), which makes the proposal impractical. Authors admit that the protocol is unlikely to ever be accepted by the majority of Bitcoin users [5]. 2.2 The proof-of-work function Bitcoin creator Satoshi Nakamoto described the majority decision making algorithm as “oneCPU-one-vote” and used a CPU-bound pricing function (double SHA-256) for his proof-of-work scheme. Since users vote for the single history of transactions order [1], the reasonableness and consistency of this process are critical conditions for the whole system. The security of this model suffers from two drawbacks. First, it requires 51% of the network’s mining power to be under the control of honest users. Secondly, the system’s progress (bug fixes, security fixes, etc...) require the overwhelming majority of users to support and agree to the changes (this occurs when the users update their wallet software) [6].Finally this same voting mechanism is also used for collective polls about implementation of some features [7]. This permits us to conjecture the properties that must be satisfied by the proof-of-work pricing function. Such function must not enable a network participant to have a significant advantage over another participant; it requires a parity between common hardware and high cost of custom devices. From recent examples [8], we can see that the SHA-256 function used in the Bitcoin architecture does not posses this property as mining becomes more efficient on GPUs and ASIC devices when compared to high-end CPUs. Therefore, Bitcoin creates favourable conditions for a large gap between the voting power of participants as it violates the “one-CPU-one-vote” principle since GPU and ASIC owners posses a much larger voting power when compared with CPU owners. It is a classical example of the Pareto principle where 20% of a system’s participants control more than 80% of the votes. One could argue that such inequality is not relevant to the network’s security since it is not the small number of participants controlling the majority of the votes but the honesty of these participants that matters. However, such argument is somewhat flawed since it is rather the possibility of cheap specialized hardware appearing rather than the participants’ honesty which poses a threat. To demonstrate this, let us take the following example. Suppose a malevolent individual gains significant mining power by creating his own mining farm through the cheap 2 unambiguously traced to a unique origin and final recipient. Even if two participants exchange funds in an indirect way, a properly engineered path-finding method will reveal the origin and final recipient. It is also suspected that Bitcoin does not satisfy the second property. Some researchers stated ([33, 35, 29, 31]) that a careful blockchain analysis may reveal a connection between the users of the Bitcoin network and their transactions. Although a number of methods are disputed [25], it is suspected that a lot of hidden personal information can be extracted from the public database. Bitcoin’s failure to satisfy the two properties outlined above leads us to conclude that it is not an anonymous but a pseudo-anonymous electronic cash system. Users were quick to develop solutions to circumvent this shortcoming. Two direct solutions were “laundering services” [2] and the development of distributed methods [3, 4]. Both solutions are based on the idea of mixing several public transactions and sending them through some intermediary address; which in turn suffers the drawback of requiring a trusted third party. Recently, a more creative scheme was proposed by I. Miers et al. [28]: “Zerocoin”. Zerocoin utilizes a cryptographic one-way accumulators and zero-knoweldge proofs which permit users to “convert” bitcoins to zerocoins and spend them using anonymous proof of ownership instead of explicit public-key based digital signatures. However, such knowledge proofs have a constant but inconvenient size - about 30kb (based on today’s Bitcoin limits), which makes the proposal impractical. Authors admit that the protocol is unlikely to ever be accepted by the majority of Bitcoin users [5]. 2.2 The proof-of-work function Bitcoin creator Satoshi Nakamoto described the majority decision making algorithm as “oneCPU-one-vote” and used a CPU-bound pricing function (double SHA-256) for his proof-of-work scheme. Since users vote for the single history of transactions order [1], the reasonableness and consistency of this process are critical conditions for the whole system. The security of this model suffers from two drawbacks. First, it requires 51% of the network’s mining power to be under the control of honest users. Secondly, the system’s progress (bug fixes, security fixes, etc...) require the overwhelming majority of users to support and agree to the changes (this occurs when the users update their wallet software) [6].Finally this same voting mechanism is also used for collective polls about implementation of some features [7]. This permits us to conjecture the properties that must be satisfied by the proof-of-work pricing function. Such function must not enable a network participant to have a significant advantage over another participant; it requires a parity between common hardware and high cost of custom devices. From recent examples [8], we can see that the SHA-256 function used in the Bitcoin architecture does not posses this property as mining becomes more efficient on GPUs and ASIC devices when compared to high-end CPUs. Therefore, Bitcoin creates favourable conditions for a large gap between the voting power of participants as it violates the “one-CPU-one-vote” principle since GPU and ASIC owners posses a much larger voting power when compared with CPU owners. It is a classical example of the Pareto principle where 20% of a system’s participants control more than 80% of the votes. One could argue that such inequality is not relevant to the network’s security since it is not the small number of participants controlling the majority of the votes but the honesty of these participants that matters. However, such argument is somewhat flawed since it is rather the possibility of cheap specialized hardware appearing rather than the participants’ honesty which poses a threat. To demonstrate this, let us take the following example. Suppose a malevolent individual gains significant mining power by creating his own mining farm through the cheap 2 Comments on page 2
Bitcoin ข้อเสียและวิธีแก้ปัญหาที่เป็นไปได้
2 Bitcoin ข้อเสียและวิธีแก้ปัญหาที่เป็นไปได้ 2.1 การติดตามธุรกรรม ความเป็นส่วนตัวและการไม่เปิดเผยตัวตนเป็นสิ่งสำคัญที่สุดของเงินสดอิเล็กทรอนิกส์ การชำระเงินแบบเพียร์ทูเพียร์ พยายามปกปิดจากมุมมองของบุคคลที่สาม ซึ่งเป็นความแตกต่างที่ชัดเจนเมื่อเปรียบเทียบกับแบบดั้งเดิม การธนาคาร โดยเฉพาะอย่างยิ่ง T. Okamoto และ K. Ohta ได้อธิบายเกณฑ์หกประการของเงินสดอิเล็กทรอนิกส์ในอุดมคติ ซึ่งรวมถึง “ความเป็นส่วนตัว: ความสัมพันธ์ระหว่างผู้ใช้กับการซื้อของเขาจะต้องไม่สามารถติดตามได้ โดยใครก็ตาม” [30]. จากคำอธิบาย เราได้รับคุณสมบัติสองประการที่ไม่ระบุชื่อโดยสมบูรณ์ แบบจำลองเงินสดอิเล็กทรอนิกส์จะต้องเป็นไปตามข้อกำหนดเพื่อให้เป็นไปตามข้อกำหนดที่ Okamoto ระบุไว้ และโอตะ: ไม่สามารถติดตามได้: สำหรับแต่ละธุรกรรมที่เข้ามา ผู้ส่งที่เป็นไปได้ทั้งหมดสามารถติดตั้งได้ ไม่สามารถเชื่อมโยงได้: สำหรับธุรกรรมขาออกสองรายการใดๆ จะไม่สามารถพิสูจน์ได้ว่าถูกส่งไป คนคนเดียวกัน ขออภัย Bitcoin ไม่เป็นไปตามข้อกำหนดที่ไม่สามารถติดตามได้ เนื่องจากธุรกรรมทั้งหมดที่เกิดขึ้นระหว่างผู้เข้าร่วมเครือข่ายนั้นเป็นแบบสาธารณะ ธุรกรรมใดๆ ก็สามารถเกิดขึ้นได้ 1 CryptoNote เวอร์ชัน 2.0 นิโคลัส ฟาน ซาเบอร์ฮาเกน 17 ตุลาคม 2556 1 บทนำ “Bitcoin” [1] ประสบความสำเร็จในการนำแนวคิดเงินสดอิเล็กทรอนิกส์ p2p ไปใช้ ทั้งสองอย่าง มืออาชีพและประชาชนทั่วไปต่างก็ชื่นชมการผสมผสานที่สะดวกสบายของ ธุรกรรมสาธารณะและ proof-of-work เป็นรูปแบบความน่าเชื่อถือ ปัจจุบันฐานผู้ใช้เงินสดอิเล็กทรอนิกส์ กำลังเติบโตอย่างมั่นคง ลูกค้าถูกดึงดูดด้วยค่าธรรมเนียมต่ำและการไม่เปิดเผยตัวตน ด้วยเงินสดอิเล็กทรอนิกส์และร้านค้าให้ความสำคัญกับการปล่อยก๊าซเรือนกระจกที่คาดการณ์ไว้และกระจายอำนาจ Bitcoin มี ได้รับการพิสูจน์อย่างมีประสิทธิภาพว่าเงินสดอิเล็กทรอนิกส์สามารถทำได้ง่ายเหมือนกับเงินกระดาษและสะดวกพอ ๆ กับ บัตรเครดิต น่าเสียดายที่ Bitcoin ประสบกับข้อบกพร่องหลายประการ เช่น ระบบมีการกระจาย ธรรมชาติไม่สามารถยืดหยุ่นได้ ทำให้ไม่สามารถใช้งานคุณสมบัติใหม่ได้จนกว่าผู้ใช้เครือข่ายเกือบทั้งหมดจะอัปเดตไคลเอนต์ของตน ข้อบกพร่องที่สำคัญบางประการที่ไม่สามารถแก้ไขได้อย่างรวดเร็วจะขัดขวาง Bitcoin การแพร่กระจายอย่างกว้างขวาง ในโมเดลที่ไม่ยืดหยุ่นดังกล่าว การเปิดตัวโปรเจ็กต์ใหม่จะมีประสิทธิภาพมากกว่า แทนที่จะแก้ไขโครงการเดิมอย่างถาวร ในบทความนี้ เราศึกษาและเสนอวิธีแก้ปัญหาข้อบกพร่องหลักของ Bitcoin เราเชื่อ ว่าระบบที่คำนึงถึงแนวทางแก้ไขที่เราเสนอจะนำไปสู่การแข่งขันที่ดี ในระบบเงินสดอิเล็กทรอนิกส์ต่างๆ นอกจากนี้เรายังเสนอเงินสดอิเล็กทรอนิกส์ของเราเอง “CryptoNote” ชื่อที่เน้นความก้าวหน้าครั้งต่อไปในด้านเงินสดอิเล็กทรอนิกส์ 2 Bitcoin ข้อเสียและวิธีแก้ปัญหาที่เป็นไปได้ 2.1 การติดตามธุรกรรม ความเป็นส่วนตัวและการไม่เปิดเผยตัวตนเป็นสิ่งสำคัญที่สุดของเงินสดอิเล็กทรอนิกส์ การชำระเงินแบบเพียร์ทูเพียร์ พยายามปกปิดจากมุมมองของบุคคลที่สาม ซึ่งเป็นความแตกต่างที่ชัดเจนเมื่อเปรียบเทียบกับแบบดั้งเดิม การธนาคาร โดยเฉพาะอย่างยิ่ง T. Okamoto และ K. Ohta ได้อธิบายเกณฑ์หกประการของเงินสดอิเล็กทรอนิกส์ในอุดมคติ ซึ่งรวมถึง “ความเป็นส่วนตัว: ความสัมพันธ์ระหว่างผู้ใช้กับการซื้อของเขาจะต้องไม่สามารถติดตามได้ โดยใครก็ตาม” [30] จากคำอธิบาย เราได้รับคุณสมบัติสองประการที่ไม่ระบุชื่อโดยสมบูรณ์ แบบจำลองเงินสดอิเล็กทรอนิกส์จะต้องเป็นไปตามข้อกำหนดเพื่อให้เป็นไปตามข้อกำหนดที่ Okamoto ระบุไว้ และโอตะ: ไม่สามารถติดตามได้: สำหรับแต่ละธุรกรรมที่เข้ามา ผู้ส่งที่เป็นไปได้ทั้งหมดสามารถติดตั้งได้ ไม่สามารถเชื่อมโยงได้: สำหรับธุรกรรมขาออกสองรายการใดๆ จะไม่สามารถพิสูจน์ได้ว่าถูกส่งไป คนคนเดียวกัน ขออภัย Bitcoin ไม่เป็นไปตามข้อกำหนดที่ไม่สามารถติดตามได้ เนื่องจากธุรกรรมทั้งหมดที่เกิดขึ้นระหว่างผู้เข้าร่วมเครือข่ายนั้นเป็นแบบสาธารณะ ธุรกรรมใดๆ ก็สามารถเกิดขึ้นได้ 1 3 Bitcoin ล้มเหลวอย่างแน่นอน "ไม่สามารถติดตามได้" เมื่อฉันส่ง BTC ให้คุณ ซึ่งเป็นกระเป๋าเงินที่มันถูกส่งไป ได้รับการประทับตราอย่างถาวรบน blockchain ไม่มีคำถามว่าใครเป็นผู้ส่งเงินเหล่านั้น เพราะมีเพียงผู้รู้คีย์ส่วนตัวเท่านั้นที่สามารถส่งได้สืบเชื้อสายมาจากแหล่งกำเนิดและผู้รับขั้นสุดท้ายอย่างไม่คลุมเครือ แม้ว่าผู้เข้าร่วมสองคนจะแลกเปลี่ยนกันก็ตาม กองทุนในทางอ้อม วิธีการค้นหาเส้นทางที่ออกแบบมาอย่างเหมาะสมจะเปิดเผยที่มาและ ผู้รับขั้นสุดท้าย ยังสงสัยว่า Bitcoin ไม่เป็นไปตามคุณสมบัติที่สอง นักวิจัยบางคน ระบุไว้ ([33, 35, 29, 31]) ว่าการวิเคราะห์ blockchain อย่างรอบคอบอาจเปิดเผยความเชื่อมโยงระหว่าง ผู้ใช้เครือข่าย Bitcoin และธุรกรรมของพวกเขา แม้ว่าจะมีหลายวิธีก็ตาม โต้แย้ง [25] เป็นที่สงสัยว่าสามารถดึงข้อมูลส่วนบุคคลที่ซ่อนอยู่จำนวนมากออกจาก ฐานข้อมูลสาธารณะ Bitcoin ความล้มเหลวในการปฏิบัติตามคุณสมบัติทั้งสองที่สรุปไว้ข้างต้นทำให้เราสรุปได้ว่า ไม่ใช่ระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน แต่เป็นระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน ผู้ใช้มีการพัฒนาอย่างรวดเร็ว แนวทางแก้ไขเพื่อหลีกเลี่ยงข้อบกพร่องนี้ วิธีแก้ปัญหาโดยตรงสองประการคือ "บริการฟอก" [2] และ การพัฒนาวิธีการแบบกระจาย [3, 4] โซลูชันทั้งสองมีพื้นฐานมาจากแนวคิดเรื่องการผสม ธุรกรรมสาธารณะหลายรายการและส่งผ่านที่อยู่ตัวกลางบางแห่ง ซึ่งในทางกลับกัน ประสบข้อเสียเปรียบในการต้องมีบุคคลที่สามที่เชื่อถือได้ เมื่อเร็ว ๆ นี้ I. Miers และคณะเสนอแผนการสร้างสรรค์เพิ่มเติม [28]: “ซีโร่คอยน์” ซีโร่คอยน์ ใช้ตัวสะสมแบบเข้ารหัสทางเดียวและการพิสูจน์ที่ไม่มีความรู้ซึ่งอนุญาตให้ผู้ใช้ “แปลง” bitcoins ให้เป็นศูนย์เหรียญและใช้มันโดยใช้หลักฐานการเป็นเจ้าของที่ไม่เปิดเผยตัวตนแทน ลายเซ็นดิจิทัลที่ใช้คีย์สาธารณะที่ชัดเจน อย่างไรก็ตาม การพิสูจน์ความรู้ดังกล่าวมีความคงที่ แต่ขนาดไม่สะดวก - ประมาณ 30kb (ตามขีดจำกัด Bitcoin ของวันนี้) ซึ่งทำให้ข้อเสนอ ทำไม่ได้ ผู้เขียนยอมรับว่าโปรโตคอลนี้ไม่น่าจะได้รับการยอมรับจากคนส่วนใหญ่ Bitcoin ผู้ใช้ [5] 2.2 ฟังก์ชัน proof-of-work Bitcoin ผู้สร้าง Satoshi Nakamoto อธิบายอัลกอริธึมการตัดสินใจส่วนใหญ่ว่า "หนึ่ง CPU-หนึ่งโหวต" และใช้ฟังก์ชันการกำหนดราคาที่ผูกกับ CPU (สองเท่า SHA-256) สำหรับ proof-of-work ของเขา โครงการ เนื่องจากผู้ใช้ลงคะแนนสำหรับประวัติธุรกรรมเดียวเพื่อ [1] ความสมเหตุสมผลและ ความสม่ำเสมอของกระบวนการนี้เป็นเงื่อนไขที่สำคัญสำหรับทั้งระบบ ความปลอดภัยของรุ่นนี้มีข้อบกพร่องสองประการ อันดับแรก ต้องใช้ 51% ของเครือข่าย อำนาจการขุดให้อยู่ภายใต้การควบคุมของผู้ใช้ที่ซื่อสัตย์ ประการที่สอง ความคืบหน้าของระบบ (แก้ไขข้อบกพร่อง การแก้ไขด้านความปลอดภัย ฯลฯ...) ต้องการให้ผู้ใช้ส่วนใหญ่สนับสนุนและยอมรับ การเปลี่ยนแปลง (สิ่งนี้เกิดขึ้นเมื่อผู้ใช้อัปเดตซอฟต์แวร์กระเป๋าเงินของตน) [6].ในที่สุดการโหวตแบบเดียวกันนี้ กลไกนี้ยังใช้สำหรับการสำรวจความคิดเห็นโดยรวมเกี่ยวกับการใช้งานคุณลักษณะบางอย่าง [7] สิ่งนี้ทำให้เราสามารถคาดเดาคุณสมบัติที่จะต้องได้รับความพึงพอใจจาก proof-of-work ฟังก์ชั่นการกำหนดราคา ฟังก์ชันดังกล่าวจะต้องไม่ทำให้ผู้เข้าร่วมเครือข่ายมีนัยสำคัญ ได้เปรียบเหนือผู้เข้าร่วมรายอื่น มันต้องมีความเท่าเทียมกันระหว่างฮาร์ดแวร์ทั่วไปและสูง ต้นทุนของอุปกรณ์ที่กำหนดเอง จากตัวอย่างล่าสุด [8] เราจะเห็นว่ามีการใช้ฟังก์ชัน SHA-256 ในสถาปัตยกรรม Bitcoin ไม่มีคุณสมบัตินี้ เนื่องจากการขุดมีประสิทธิภาพมากขึ้น GPU และอุปกรณ์ ASIC เมื่อเปรียบเทียบกับ CPU ระดับสูง ดังนั้น Bitcoin จึงสร้างเงื่อนไขที่เอื้ออำนวยสำหรับช่องว่างขนาดใหญ่ระหว่างอำนาจการลงคะแนนของ ผู้เข้าร่วมเนื่องจากละเมิดหลักการ "หนึ่ง CPU - หนึ่งโหวต" เนื่องจากเจ้าของ GPU และ ASIC ครอบครอง พลังการลงคะแนนที่ใหญ่กว่ามากเมื่อเปรียบเทียบกับเจ้าของ CPU เป็นตัวอย่างคลาสสิกของ หลักการพาเรโตโดยที่ผู้เข้าร่วม 20% ของระบบควบคุมคะแนนเสียงมากกว่า 80% อาจมีคนแย้งว่าความไม่เท่าเทียมกันดังกล่าวไม่เกี่ยวข้องกับความปลอดภัยของเครือข่ายเนื่องจากไม่เป็นเช่นนั้น ผู้เข้าร่วมจำนวนน้อยที่ควบคุมคะแนนเสียงส่วนใหญ่แต่มีความซื่อสัตย์สุจริต ผู้เข้าร่วมที่สำคัญ อย่างไรก็ตาม ข้อโต้แย้งดังกล่าวค่อนข้างมีข้อบกพร่องเนื่องจากค่อนข้างจะเป็นเช่นนั้น ความเป็นไปได้ของฮาร์ดแวร์พิเศษราคาถูกที่ปรากฏมากกว่าความซื่อสัตย์ของผู้เข้าร่วมซึ่ง ก่อให้เกิดภัยคุกคาม เพื่อแสดงให้เห็นสิ่งนี้ ให้เรายกตัวอย่างต่อไปนี้ สมมุติว่าเป็นคนใจร้าย แต่ละคนได้รับพลังการขุดที่สำคัญโดยการสร้างฟาร์มขุดของตัวเองด้วยราคาถูก 2 สืบเชื้อสายมาจากแหล่งกำเนิดและผู้รับขั้นสุดท้ายอย่างไม่คลุมเครือ แม้ว่าผู้เข้าร่วมสองคนจะแลกเปลี่ยนกันก็ตาม กองทุนในทางอ้อม วิธีการค้นหาเส้นทางที่ออกแบบมาอย่างเหมาะสมจะเปิดเผยที่มาและ ผู้รับขั้นสุดท้าย ยังสงสัยว่า Bitcoin ไม่เป็นไปตามคุณสมบัติที่สอง นักวิจัยบางคน ระบุไว้ ([33, 35, 29, 31]) ว่าการวิเคราะห์ blockchain อย่างรอบคอบอาจเปิดเผยความเชื่อมโยงระหว่าง ผู้ใช้เครือข่าย Bitcoin และธุรกรรมของพวกเขา แม้ว่าจะมีหลายวิธีก็ตาม งระบุ [25] เป็นที่สงสัยว่าสามารถดึงข้อมูลส่วนบุคคลที่ซ่อนอยู่จำนวนมากออกจาก ฐานข้อมูลสาธารณะ Bitcoin ความล้มเหลวในการปฏิบัติตามคุณสมบัติทั้งสองที่ระบุไว้ข้างต้นทำให้เราสรุปได้ว่า ไม่ใช่ระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน แต่เป็นระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน ผู้ใช้มีการพัฒนาอย่างรวดเร็ว แนวทางแก้ไขเพื่อหลีกเลี่ยงข้อบกพร่องนี้ วิธีแก้ปัญหาโดยตรงสองวิธีคือ "บริการฟอก" [2] และ การพัฒนาวิธีการแบบกระจาย [3, 4] โซลูชันทั้งสองมีพื้นฐานมาจากแนวคิดเรื่องการผสม ธุรกรรมสาธารณะหลายรายการและส่งผ่านที่อยู่ตัวกลางบางแห่ง ซึ่งในทางกลับกัน ประสบข้อเสียเปรียบในการต้องมีบุคคลที่สามที่เชื่อถือได้ เมื่อเร็ว ๆ นี้ I. Miers และคณะเสนอแผนการสร้างสรรค์เพิ่มเติม [28]: “ซีโร่คอยน์” ซีโร่คอยน์ ใช้ตัวสะสมแบบเข้ารหัสทางเดียวและการพิสูจน์ที่ไม่มีความรู้ซึ่งอนุญาตให้ผู้ใช้ “แปลง” bitcoins ให้เป็นศูนย์เหรียญและใช้มันโดยใช้หลักฐานการเป็นเจ้าของที่ไม่เปิดเผยตัวตนแทน ลายเซ็นดิจิทัลที่ใช้คีย์สาธารณะที่ชัดเจน อย่างไรก็ตาม การพิสูจน์ความรู้ดังกล่าวมีความคงที่ แต่ขนาดไม่สะดวก - ประมาณ 30kb (ตามขีดจำกัด Bitcoin ของวันนี้) ซึ่งทำให้ข้อเสนอ ทำไม่ได้ ผู้เขียนยอมรับว่าโปรโตคอลนี้ไม่น่าจะได้รับการยอมรับจากคนส่วนใหญ่ Bitcoin ผู้ใช้ [5] 2.2 ฟังก์ชัน proof-of-work Bitcoin ผู้สร้าง Satoshi Nakamoto อธิบายอัลกอริธึมการตัดสินใจส่วนใหญ่ว่า "หนึ่ง CPU-หนึ่งโหวต" และใช้ฟังก์ชันการกำหนดราคาที่ผูกกับ CPU (สองเท่า SHA-256) สำหรับ proof-of-work ของเขา โครงการ เนื่องจากผู้ใช้ลงคะแนนสำหรับประวัติธุรกรรมเดียวเพื่อ [1] ความสมเหตุสมผลและ ความสม่ำเสมอของกระบวนการนี้เป็นเงื่อนไขที่สำคัญสำหรับทั้งระบบ ความปลอดภัยของรุ่นนี้มีข้อบกพร่องสองประการ อันดับแรก ต้องใช้ 51% ของเครือข่าย อำนาจการขุดให้อยู่ภายใต้การควบคุมของผู้ใช้ที่ซื่อสัตย์ ประการที่สอง ความคืบหน้าของระบบ (แก้ไขข้อบกพร่อง การแก้ไขด้านความปลอดภัย ฯลฯ...) ต้องการให้ผู้ใช้ส่วนใหญ่สนับสนุนและยอมรับ การเปลี่ยนแปลง (เกิดขึ้นเมื่อผู้ใช้อัปเดตซอฟต์แวร์กระเป๋าเงินของตน) [6].ในที่สุดการโหวตแบบเดียวกันนี้ กลไกนี้ยังใช้สำหรับการสำรวจความคิดเห็นโดยรวมเกี่ยวกับการใช้งานคุณลักษณะบางอย่าง [7] สิ่งนี้ทำให้เราสามารถคาดเดาคุณสมบัติที่จะต้องได้รับความพึงพอใจจาก proof-of-work ฟังก์ชั่นการกำหนดราคา ฟังก์ชันดังกล่าวจะต้องไม่ทำให้ผู้เข้าร่วมเครือข่ายมีนัยสำคัญ ได้เปรียบเหนือผู้เข้าร่วมรายอื่น มันต้องมีความเท่าเทียมกันระหว่างฮาร์ดแวร์ทั่วไปและสูง ต้นทุนของอุปกรณ์ที่กำหนดเอง จากตัวอย่างล่าสุด [8] เราจะเห็นว่ามีการใช้ฟังก์ชัน SHA-256 ในสถาปัตยกรรม Bitcoin ไม่มีคุณสมบัตินี้ เนื่องจากการขุดมีประสิทธิภาพมากขึ้น GPU และอุปกรณ์ ASIC เมื่อเปรียบเทียบกับ CPU ระดับสูง ดังนั้น Bitcoin จึงสร้างเงื่อนไขที่เอื้ออำนวยสำหรับช่องว่างขนาดใหญ่ระหว่างอำนาจการลงคะแนนของ ผู้เข้าร่วมเนื่องจากละเมิดหลักการ "หนึ่ง CPU - หนึ่งโหวต" เนื่องจากเจ้าของ GPU และ ASIC ครอบครอง พลังการลงคะแนนที่ใหญ่กว่ามากเมื่อเปรียบเทียบกับเจ้าของ CPU เป็นตัวอย่างคลาสสิกของ หลักการพาเรโตโดยที่ผู้เข้าร่วม 20% ของระบบควบคุมคะแนนเสียงมากกว่า 80% อาจมีคนแย้งว่าความไม่เท่าเทียมกันดังกล่าวไม่เกี่ยวข้องกับความปลอดภัยของเครือข่ายเนื่องจากไม่เป็นเช่นนั้น ผู้เข้าร่วมจำนวนน้อยที่ควบคุมคะแนนเสียงส่วนใหญ่แต่มีความซื่อสัตย์สุจริต ผู้เข้าร่วมที่สำคัญ อย่างไรก็ตาม ข้อโต้แย้งดังกล่าวค่อนข้างมีข้อบกพร่องเนื่องจากค่อนข้างจะเป็นเช่นนั้น ความเป็นไปได้ของฮาร์ดแวร์พิเศษราคาถูกที่ปรากฏมากกว่าความซื่อสัตย์ของผู้เข้าร่วมซึ่ง ก่อให้เกิดภัยคุกคาม เพื่อแสดงให้เห็นสิ่งนี้ ให้เรายกตัวอย่างต่อไปนี้ สมมุติว่าเป็นคนใจร้าย แต่ละคนได้รับพลังการขุดที่สำคัญโดยการสร้างฟาร์มขุดของตัวเองด้วยราคาถูก 2 4 สมมุติว่าหากผู้ใช้ทุกคนช่วยปกปิดตัวตนของตนเองด้วยการสร้างที่อยู่ใหม่อยู่เสมอ สำหรับทุกการชำระเงินที่ได้รับ (ซึ่งไร้สาระ แต่ในทางเทคนิคแล้วเป็นวิธีที่ "ถูกต้อง" ในการดำเนินการ) และหากผู้ใช้ทุกคนช่วยปกปิดตัวตนของคนอื่นโดยยืนกรานว่าพวกเขาจะไม่ส่งเงิน ไปยังที่อยู่ BTC เดียวกันสองครั้ง จากนั้น Bitcoin จะยังคงเพียง ตามสถานการณ์ เท่านั้นที่ผ่าน การทดสอบการเชื่อมต่อไม่ได้ ทำไม ข้อมูลผู้บริโภคสามารถใช้เพื่อระบุจำนวนที่น่าอัศจรรย์เกี่ยวกับผู้คนได้ตลอดเวลา ดูตัวอย่าง http://www.applieddatalabs.com/content/target-knows-it-shows ลองจินตนาการว่านี่คืออีก 20 ปีข้างหน้า และจินตนาการเพิ่มเติมว่า Target ไม่ได้เพิ่งรู้ เกี่ยวกับนิสัยการซื้อของคุณที่ Target แต่พวกเขาได้ขุด blockchain มาทั้งหมด การซื้อส่วนตัวของคุณด้วยกระเป๋าเงิน COINBASE ของคุณในอดีต สิบสองปี พวกเขาจะประมาณว่า "เฮ้เพื่อน คืนนี้คุณอาจจะไปซื้อยาแก้ไอก็ได้ คุณไม่ไปหรอก พรุ่งนี้จะรู้สึกดี” กรณีนี้อาจไม่เกิดขึ้นหากมีการใช้ประโยชน์จากการเรียงลำดับหลายฝ่ายอย่างถูกต้อง ดูตัวอย่างนี้โพสต์ในบล็อก: http://blog.ezyang.com/2012/07/secure-multiparty-bitcoin-anonymization/ ฉันไม่มั่นใจกับคณิตศาสตร์ในเรื่องนี้โดยสิ้นเชิง แต่ ... ทีละฉบับใช่ไหม จำเป็นต้องมีการอ้างอิง ในขณะที่โปรโตคอล Zerocoin (แบบสแตนด์อโลน) อาจไม่เพียงพอ Zerocash ดูเหมือนว่าโปรโตคอลจะใช้ธุรกรรมขนาด 1kb โครงการดังกล่าวได้รับการสนับสนุนโดย แน่นอนว่ากองทัพสหรัฐฯ และอิสราเอล ใครจะรู้เกี่ยวกับความแข็งแกร่งของมัน ในอีกทางหนึ่ง มือไม่มีใครอยากที่จะใช้จ่ายเงินโดยไม่ต้องกำกับดูแลมากกว่ากองทัพ http://zerocash-project.org/ ฉันไม่มั่นใจ... ดูตัวอย่าง http://fc14.ifca.ai/bitcoin/papers/bitcoin14_submission_12.pdf อ้างอิงจากผู้พัฒนา Cryptonote Maurice Planck (อาจเป็นนามแฝง) จาก cryptonote ฟอรั่ม: “ซีโร่คอยน์, ซีโร่แคช” นี่คือเทคโนโลยีที่ทันสมัยที่สุดฉันต้องยอมรับ ใช่คำพูด ข้างต้นมาจากการวิเคราะห์โปรโตคอลเวอร์ชันก่อนหน้า สำหรับความรู้ของฉันมันไม่ใช่ 288 แต่เป็น 384 ไบต์ แต่อย่างไรก็ตาม นี่เป็นข่าวดี พวกเขาใช้เทคนิคใหม่ล่าสุดที่เรียกว่า SNARK ซึ่งมีข้อเสียบางประการ: ตัวอย่างเช่น ฐานข้อมูลเริ่มต้นขนาดใหญ่ของพารามิเตอร์สาธารณะที่จำเป็นในการสร้างลายเซ็น (มากกว่า 1 GB) และ เวลาสำคัญที่จำเป็นในการสร้างธุรกรรม (มากกว่าหนึ่งนาที) ในที่สุดพวกเขาก็ใช้ a crypto รุ่นเยาว์ ซึ่งฉันพูดถึงไปแล้วว่าเป็นแนวคิดที่น่าโต้แย้ง: https://forum.cryptonote.org/viewtopic.php?f= " - Maurice P. พฤ. 03 เม.ย. 2557 19:56 น ฟังก์ชันที่ทำงานใน CPU และไม่เหมาะกับ GPU, FPGA หรือ ASIC การคำนวณ "ปริศนา" ที่ใช้ใน proof-of-work เรียกว่าฟังก์ชันการกำหนดราคา ฟังก์ชันต้นทุน หรือ ฟังก์ชั่นปริศนา
สืบเชื้อสายมาจากแหล่งกำเนิดและผู้รับขั้นสุดท้ายอย่างไม่คลุมเครือ แม้ว่าผู้เข้าร่วมสองคนจะแลกเปลี่ยนกันก็ตาม กองทุนในทางอ้อม วิธีการค้นหาเส้นทางที่ออกแบบมาอย่างเหมาะสมจะเปิดเผยที่มาและ ผู้รับขั้นสุดท้าย ยังสงสัยว่า Bitcoin ไม่เป็นไปตามคุณสมบัติที่สอง นักวิจัยบางคน ระบุไว้ ([33, 35, 29, 31]) ว่าการวิเคราะห์ blockchain อย่างรอบคอบอาจเปิดเผยความเชื่อมโยงระหว่าง ผู้ใช้เครือข่าย Bitcoin และธุรกรรมของพวกเขา แม้ว่าจะมีหลายวิธีก็ตาม โต้แย้ง [25] เป็นที่สงสัยว่าสามารถดึงข้อมูลส่วนบุคคลที่ซ่อนอยู่จำนวนมากออกจาก ฐานข้อมูลสาธารณะ Bitcoin ความล้มเหลวในการปฏิบัติตามคุณสมบัติทั้งสองที่ระบุไว้ข้างต้นทำให้เราสรุปได้ว่า ไม่ใช่ระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน แต่เป็นระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน ผู้ใช้มีการพัฒนาอย่างรวดเร็ว แนวทางแก้ไขเพื่อหลีกเลี่ยงข้อบกพร่องนี้ วิธีแก้ปัญหาโดยตรงสองประการคือ "บริการฟอก" [2] และ การพัฒนาวิธีการแบบกระจาย [3, 4] โซลูชันทั้งสองมีพื้นฐานมาจากแนวคิดเรื่องการผสม ธุรกรรมสาธารณะหลายรายการและส่งผ่านที่อยู่ตัวกลางบางแห่ง ซึ่งในทางกลับกัน ประสบข้อเสียเปรียบในการต้องมีบุคคลที่สามที่เชื่อถือได้ เมื่อเร็ว ๆ นี้ I. Miers และคณะเสนอแผนการสร้างสรรค์เพิ่มเติม [28]: “ซีโร่คอยน์” ซีโร่คอยน์ ใช้ตัวสะสมแบบเข้ารหัสทางเดียวและการพิสูจน์ที่ไม่มีความรู้ซึ่งอนุญาตให้ผู้ใช้ “แปลง” bitcoins ให้เป็นศูนย์เหรียญและใช้มันโดยใช้หลักฐานการเป็นเจ้าของที่ไม่เปิดเผยตัวตนแทน ลายเซ็นดิจิทัลที่ใช้คีย์สาธารณะที่ชัดเจน อย่างไรก็ตาม การพิสูจน์ความรู้ดังกล่าวมีความคงที่ แต่ขนาดไม่สะดวก - ประมาณ 30kb (ขึ้นอยู่กับขีดจำกัด Bitcoin ของวันนี้) ซึ่งทำให้ข้อเสนอ ทำไม่ได้ ผู้เขียนยอมรับว่าโปรโตคอลนี้ไม่น่าจะได้รับการยอมรับจากคนส่วนใหญ่ Bitcoin ผู้ใช้ [5] 2.2 ฟังก์ชัน proof-of-work Bitcoin ผู้สร้าง Satoshi Nakamoto อธิบายอัลกอริธึมการตัดสินใจส่วนใหญ่ว่า "หนึ่ง CPU-หนึ่งโหวต" และใช้ฟังก์ชันการกำหนดราคาที่ผูกกับ CPU (สองเท่า SHA-256) สำหรับ proof-of-work ของเขา โครงการ เนื่องจากผู้ใช้ลงคะแนนสำหรับประวัติธุรกรรมเดียวเพื่อ [1] ความสมเหตุสมผลและ ความสม่ำเสมอของกระบวนการนี้เป็นเงื่อนไขที่สำคัญสำหรับทั้งระบบ ความปลอดภัยของรุ่นนี้มีข้อบกพร่องสองประการ อันดับแรก ต้องใช้ 51% ของเครือข่าย อำนาจการขุดให้อยู่ภายใต้การควบคุมของผู้ใช้ที่ซื่อสัตย์ ประการที่สอง ความคืบหน้าของระบบ (แก้ไขข้อบกพร่อง การแก้ไขด้านความปลอดภัย ฯลฯ...) ต้องการให้ผู้ใช้ส่วนใหญ่สนับสนุนและยอมรับ การเปลี่ยนแปลง (เกิดขึ้นเมื่อผู้ใช้อัปเดตซอฟต์แวร์กระเป๋าเงินของตน) [6].ในที่สุดการโหวตแบบเดียวกันนี้ กลไกนี้ยังใช้สำหรับการสำรวจความคิดเห็นโดยรวมเกี่ยวกับการใช้งานคุณลักษณะบางอย่าง [7] สิ่งนี้ทำให้เราสามารถคาดเดาคุณสมบัติที่จะต้องได้รับความพึงพอใจจาก proof-of-work ฟังก์ชั่นการกำหนดราคา ฟังก์ชันดังกล่าวจะต้องไม่ทำให้ผู้เข้าร่วมเครือข่ายมีนัยสำคัญ ได้เปรียบเหนือผู้เข้าร่วมรายอื่น มันต้องมีความเท่าเทียมกันระหว่างฮาร์ดแวร์ทั่วไปและสูง ต้นทุนของอุปกรณ์ที่กำหนดเอง จากตัวอย่างล่าสุด [8] เราจะเห็นว่ามีการใช้ฟังก์ชัน SHA-256 ในสถาปัตยกรรม Bitcoin ไม่มีคุณสมบัตินี้ เนื่องจากการขุดมีประสิทธิภาพมากขึ้น GPU และอุปกรณ์ ASIC เมื่อเปรียบเทียบกับ CPU ระดับสูง ดังนั้น Bitcoin จึงสร้างเงื่อนไขที่เอื้ออำนวยสำหรับช่องว่างขนาดใหญ่ระหว่างอำนาจการลงคะแนนของ ผู้เข้าร่วมเนื่องจากละเมิดหลักการ "หนึ่ง CPU - หนึ่งโหวต" เนื่องจากเจ้าของ GPU และ ASIC ครอบครอง พลังการลงคะแนนที่ใหญ่กว่ามากเมื่อเปรียบเทียบกับเจ้าของ CPU เป็นตัวอย่างคลาสสิกของ หลักการพาเรโตโดยที่ผู้เข้าร่วม 20% ของระบบควบคุมคะแนนเสียงมากกว่า 80% อาจมีคนแย้งว่าความไม่เท่าเทียมกันดังกล่าวไม่เกี่ยวข้องกับความปลอดภัยของเครือข่ายเนื่องจากไม่เป็นเช่นนั้น ผู้เข้าร่วมจำนวนน้อยที่ควบคุมคะแนนเสียงส่วนใหญ่แต่มีความซื่อสัตย์สุจริต ผู้เข้าร่วมที่สำคัญ อย่างไรก็ตาม ข้อโต้แย้งดังกล่าวค่อนข้างมีข้อบกพร่องเนื่องจากค่อนข้างจะเป็นเช่นนั้น ความเป็นไปได้ของฮาร์ดแวร์พิเศษราคาถูกที่ปรากฏมากกว่าความซื่อสัตย์ของผู้เข้าร่วมซึ่ง ก่อให้เกิดภัยคุกคาม เพื่อแสดงให้เห็นสิ่งนี้ ให้เรายกตัวอย่างต่อไปนี้ สมมุติว่าเป็นคนใจร้าย แต่ละคนได้รับพลังการขุดที่สำคัญโดยการสร้างฟาร์มขุดของตัวเองด้วยราคาถูก 2 สืบเชื้อสายมาจากแหล่งกำเนิดและผู้รับขั้นสุดท้ายอย่างไม่คลุมเครือ แม้ว่าผู้เข้าร่วมสองคนจะแลกเปลี่ยนกันก็ตาม กองทุนในทางอ้อม วิธีการค้นหาเส้นทางที่ออกแบบมาอย่างเหมาะสมจะเปิดเผยที่มาและ ผู้รับขั้นสุดท้าย ยังสงสัยว่า Bitcoin ไม่เป็นไปตามคุณสมบัติที่สอง นักวิจัยบางคน ระบุ ([33, 35, 29, 31]) ว่าการวิเคราะห์ blockchain อย่างรอบคอบอาจเปิดเผยความเชื่อมโยงระหว่าง ผู้ใช้เครือข่าย Bitcoin และธุรกรรมของพวกเขา แม้ว่าจะมีหลายวิธีก็ตาม งระบุ [25] เป็นที่สงสัยว่าสามารถดึงข้อมูลส่วนบุคคลที่ซ่อนอยู่จำนวนมากออกจาก ฐานข้อมูลสาธารณะ Bitcoin ความล้มเหลวในการปฏิบัติตามคุณสมบัติทั้งสองที่ระบุไว้ข้างต้นทำให้เราสรุปได้ว่า ไม่ใช่ระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน แต่เป็นระบบเงินสดอิเล็กทรอนิกส์ที่ไม่เปิดเผยตัวตน ผู้ใช้มีการพัฒนาอย่างรวดเร็ว แนวทางแก้ไขเพื่อหลีกเลี่ยงข้อบกพร่องนี้ วิธีแก้ปัญหาโดยตรงสองวิธีคือ "บริการฟอก" [2] และ การพัฒนาวิธีการแบบกระจาย [3, 4] โซลูชันทั้งสองมีพื้นฐานมาจากแนวคิดเรื่องการผสม ธุรกรรมสาธารณะหลายรายการและส่งผ่านที่อยู่ตัวกลางบางแห่ง ซึ่งในทางกลับกัน ประสบข้อเสียเปรียบในการต้องมีบุคคลที่สามที่เชื่อถือได้ เมื่อเร็ว ๆ นี้ I. Miers และคณะเสนอแผนการสร้างสรรค์เพิ่มเติม [28]: “ซีโร่คอยน์” ซีโร่คอยน์ ใช้ตัวสะสมแบบเข้ารหัสทางเดียวและการพิสูจน์ที่ไม่มีความรู้ซึ่งอนุญาตให้ผู้ใช้ “แปลง” bitcoins ให้เป็นศูนย์เหรียญและใช้มันโดยใช้หลักฐานการเป็นเจ้าของที่ไม่เปิดเผยตัวตนแทน ลายเซ็นดิจิทัลที่ใช้คีย์สาธารณะที่ชัดเจน อย่างไรก็ตาม การพิสูจน์ความรู้ดังกล่าวมีความคงที่ แต่ขนาดไม่สะดวก - ประมาณ 30kb (ขึ้นอยู่กับขีดจำกัด Bitcoin ของวันนี้) ซึ่งทำให้ข้อเสนอ ทำไม่ได้ ผู้เขียนยอมรับว่าโปรโตคอลนี้ไม่น่าจะได้รับการยอมรับจากคนส่วนใหญ่ Bitcoin ผู้ใช้ [5] 2.2 ฟังก์ชัน proof-of-work Bitcoin ผู้สร้าง Satoshi Nakamoto อธิบายอัลกอริธึมการตัดสินใจส่วนใหญ่ว่า "หนึ่ง CPU-หนึ่งโหวต" และใช้ฟังก์ชันการกำหนดราคาที่ผูกกับ CPU (สองเท่า SHA-256) สำหรับ proof-of-work ของเขา โครงการ เนื่องจากผู้ใช้ลงคะแนนสำหรับประวัติธุรกรรมเดียวเพื่อ [1] ความสมเหตุสมผลและ ความสม่ำเสมอของกระบวนการนี้เป็นเงื่อนไขที่สำคัญสำหรับทั้งระบบ ความปลอดภัยของรุ่นนี้มีข้อบกพร่องสองประการ อันดับแรก ต้องใช้ 51% ของเครือข่าย อำนาจการขุดให้อยู่ภายใต้การควบคุมของผู้ใช้ที่ซื่อสัตย์ ประการที่สอง ความคืบหน้าของระบบ (แก้ไขข้อบกพร่อง การแก้ไขด้านความปลอดภัย ฯลฯ...) ต้องการให้ผู้ใช้ส่วนใหญ่สนับสนุนและยอมรับ การเปลี่ยนแปลง (เกิดขึ้นเมื่อผู้ใช้อัปเดตซอฟต์แวร์กระเป๋าเงินของตน) [6].ในที่สุดการโหวตแบบเดียวกันนี้ กลไกนี้ยังใช้สำหรับการสำรวจความคิดเห็นโดยรวมเกี่ยวกับการใช้งานคุณลักษณะบางอย่าง [7] สิ่งนี้ทำให้เราสามารถคาดเดาคุณสมบัติที่จะต้องได้รับความพึงพอใจจาก proof-of-work ฟังก์ชั่นการกำหนดราคา ฟังก์ชันดังกล่าวจะต้องไม่ทำให้ผู้เข้าร่วมเครือข่ายมีนัยสำคัญ ได้เปรียบเหนือผู้เข้าร่วมรายอื่น มันต้องมีความเท่าเทียมกันระหว่างฮาร์ดแวร์ทั่วไปและสูง ต้นทุนของอุปกรณ์ที่กำหนดเอง จากตัวอย่างล่าสุด [8] เราจะเห็นว่ามีการใช้ฟังก์ชัน SHA-256 ในสถาปัตยกรรม Bitcoin ไม่มีคุณสมบัตินี้ เนื่องจากการขุดมีประสิทธิภาพมากขึ้น GPU และอุปกรณ์ ASIC เมื่อเปรียบเทียบกับ CPU ระดับสูง ดังนั้น Bitcoin จึงสร้างเงื่อนไขที่เอื้ออำนวยสำหรับช่องว่างขนาดใหญ่ระหว่างอำนาจการลงคะแนนของ ผู้เข้าร่วมเนื่องจากละเมิดหลักการ "หนึ่ง CPU - หนึ่งโหวต" เนื่องจากเจ้าของ GPU และ ASIC ครอบครอง พลังการลงคะแนนที่ใหญ่กว่ามากเมื่อเปรียบเทียบกับเจ้าของ CPU เป็นตัวอย่างคลาสสิกของ หลักการพาเรโตโดยที่ผู้เข้าร่วม 20% ของระบบควบคุมคะแนนเสียงมากกว่า 80% อาจมีคนแย้งว่าความไม่เท่าเทียมกันดังกล่าวไม่เกี่ยวข้องกับความปลอดภัยของเครือข่ายเนื่องจากไม่เป็นเช่นนั้น ผู้เข้าร่วมจำนวนน้อยที่ควบคุมคะแนนเสียงส่วนใหญ่แต่มีความซื่อสัตย์สุจริต ผู้เข้าร่วมที่สำคัญ อย่างไรก็ตาม ข้อโต้แย้งดังกล่าวค่อนข้างมีข้อบกพร่องเนื่องจากค่อนข้างจะเป็นเช่นนั้น ความเป็นไปได้ของฮาร์ดแวร์พิเศษราคาถูกที่ปรากฏมากกว่าความซื่อสัตย์ของผู้เข้าร่วมซึ่ง ก่อให้เกิดภัยคุกคาม เพื่อแสดงให้เห็นสิ่งนี้ ให้เรายกตัวอย่างต่อไปนี้ สมมุติว่าเป็นคนใจร้าย แต่ละคนได้รับพลังการขุดที่สำคัญโดยการสร้างฟาร์มขุดของตัวเองด้วยราคาถูก 2 ความเห็นหน้า 2
The CryptoNote Technology
The CryptoNote Technology
Now that we have covered the limitations of the Bitcoin technology, we will concentrate on presenting the features of CryptoNote.
เทคโนโลยี CryptoNote
ตอนนี้เราได้ครอบคลุมข้อจำกัดของเทคโนโลยี Bitcoin แล้ว เราจะมุ่งเน้นไปที่ นำเสนอคุณสมบัติของ CryptoNote
Untraceable Transactions
Untraceable Transactions
In this section we propose a scheme of fully anonymous transactions satisfying both untraceability
and unlinkability conditions. An important feature of our solution is its autonomy: the sender
is not required to cooperate with other users or a trusted third party to make his transactions;
hence each participant produces a cover traffic independently.
4.1
Literature review
Our scheme relies on the cryptographic primitive called a group signature. First presented by
D. Chaum and E. van Heyst [19], it allows a user to sign his message on behalf of the group.
After signing the message the user provides (for verification purposes) not his own single public
1This is so-called “soft limit” — the reference client restriction for creating new blocks. Hard maximum of
possible blocksize was 1 MB
4
them if necessary that causes the main drawbacks. Unfortunately, it is hard to predict when the
constants may need to be changed and replacing them may lead to terrible consequences.
A good example of a hardcoded limit change leading to disastrous consequences is the block
size limit set to 250kb1. This limit was sufficient to hold about 10000 standard transactions. In
early 2013, this limit had almost been reached and an agreement was reached to increase the
limit. The change was implemented in wallet version 0.8 and ended with a 24-blocks chain split
and a successful double-spend attack [9]. While the bug was not in the Bitcoin protocol, but
rather in the database engine it could have been easily caught by a simple stress test if there was
no artificially introduced block size limit.
Constants also act as a form of centralization point.
Despite the peer-to-peer nature of
Bitcoin, an overwhelming majority of nodes use the official reference client [10] developed by
a small group of people. This group makes the decision to implement changes to the protocol
and most people accept these changes irrespective of their “correctness”. Some decisions caused
heated discussions and even calls for boycott [11], which indicates that the community and the
developers may disagree on some important points. It therefore seems logical to have a protocol
with user-configurable and self-adjusting variables as a possible way to avoid these problems.
2.5
Bulky scripts
The scripting system in Bitcoin is a heavy and complex feature. It potentially allows one to create
sophisticated transactions [12], but some of its features are disabled due to security concerns and
some have never even been used [13]. The script (including both senders’ and receivers’ parts)
for the most popular transaction in Bitcoin looks like this:
key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 8 A ring signature works like this: Alex wants to leak a message to WikiLeaks about her employer. Every employee in her Company has a private/public key pair (Ri, Ui). She composes her signature with input set as her message, m, her private key, Ri, and EVERYBODY’s public keys, (Ui;i=1...n). Anyone (without knowing any private keys) can verify easily that some pair (Rj, Uj) must have been used to construct the signature... someone who works for Alex’s employer... but it’s essentially a random guess to figure out which one it could be. http://en.wikipedia.org/wiki/Ring_signature#Crypto-currencies http://link.springer.com/chapter/10.1007/3-540-45682-1_32#page-1 http://link.springer.com/chapter/10.1007/11424826_65 http://link.springer.com/chapter/10.1007/978-3-540-27800-9_28 http://link.springer.com/chapter/10.1007%2F11774716_9 Notice that a linkable ring signature described here is kind of the opposite of "unlinkable" described above. Here, we intercept two messages, and we can determine whether the same party sent them, although we should still be unable to determine who that party is. The definition of "unlinkable" used to construct Cryptonote means we cannot determine whether the same party is receiving them. Hence, what we really have here is FOUR things going on. A system can be linkable or non-linkable, depending on whether or not it’s possible to determine whether the sender of two messages are the same (regardless of whether this requires revoking anonymity). And a system can be unlinkable or non-unlinkable, depending on whether or not it’s possible to determine whether the receiver of two messages are the same (regardless of whether or not this requires revoking anonymity). Please don’t blame me for this terrible terminology. Graph theorists should probably be pleased. Some of you may be more comfortable with "receiver linkable" versus "sender linkable." http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 When I read this, this seemed like a silly feature. Then I read that it may be a feature for electronic voting, and that seemed to make sense. Kinda cool, from that perspective. But I’m not totally sure about purposely implementing traceable ring signatures. http://search.ieice.org/bin/summary.php?id=e95-a_1_151
key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 9 Gosh, the author of this whitepaper sure could have worded this better! Let’s say that an employee-owned company wants to take a vote on whether or not to acquire certain new assets, and Alex and Brenda are both employees. The Company provides each employee a message like "I vote yes on Proposition A!" which has the metainformation "issue" [PROP A] and asks them to sign it with a traceable ring signature if they support the proposition. Using a traditional ring signature, a dishonest employee can sign the message multiple times, presumably with different nonces, in order to vote as many times as they like. On the other hand, in a traceable ring signature scheme, Alex will go to vote, and her private key will have been used on the issue [PROP A]. If Alex tries to sign a message like "I, Brenda, approve of proposition A!" to "frame" Brenda and double vote, this new message will also have the issue [PROP A]. Since Alex’s private key has already tripped the [PROP A] issue, Alex’s identity will be immediately revealed as a fraud. Which, face it, is pretty cool! Cryptography enforced voting equality. http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 This paper is interesting, essentially creating an ad-hoc ring signature but without any of the other participant’s consent. The structure of the signature may be different; I haven’t dug deep, and I haven’t seen whether it’s secure. https://people.csail.mit.edu/rivest/AdidaHohenbergerRivest-AdHocGroupSignaturesFromHijackedKeypai Ad-hoc group signatures are: ring signatures, which are group signatures with no group managers, no centralization, but allows a member in an ad-hoc group to provably claim that it has (not) issued the anonymous signature on behalf of the group. http://link.springer.com/chapter/10.1007/11908739_9 This isn’t quite correct, from my understanding. And my understanding will likely change as I get deeper into this project. But from my understanding, the hierarchy looks like this. Group sigs: group managers control traceability and the ability of adding or removing members from being signers. Ring sigs: Arbitrary group formation without a group manager. No anonymity revocation. No way to repudiate oneself from a particular signature. With traceable and linkable ring signatures, anonymity is somewhat scaleable. Ad-hoc group signatures: like ring signatures, but members can prove that they did not create a particular signature. This is important when anyone in a group can produce a signature. http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 Fujisaki and Suzuki’s algorithm is tweaked later by the author to provide one-time-ness. So we will analyze Fujisaki and Suzuki’s algorithm concurrently with the new algorithm rather than going over it here.
key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 key, but the keys of all the users of his group. A verifier is convinced that the real signer is a member of the group, but cannot exclusively identify the signer. The original protocol required a trusted third party (called the Group Manager), and he was the only one who could trace the signer. The next version called a ring signature, introduced by Rivest et al. in [34], was an autonomous scheme without Group Manager and anonymity revocation. Various modifications of this scheme appeared later: linkable ring signature [26, 27, 17] allowed to determine if two signatures were produced by the same group member, traceable ring signature [24, 23] limited excessive anonymity by providing possibility to trace the signer of two messages with respect to the same metainformation (or “tag” in terms of [24]). A similar cryptographic construction is also known as a ad-hoc group signature [16, 38]. It emphasizes the arbitrary group formation, whereas group/ring signature schemes rather imply a fixed set of members. For the most part, our solution is based on the work “Traceable ring signature” by E. Fujisaki and K. Suzuki [24]. In order to distinguish the original algorithm and our modification we will call the latter a one-time ring signature, stressing the user’s capability to produce only one valid signature under his private key. We weakened the traceability property and kept the linkability only to provide one-timeness: the public key may appear in many foreign verifying sets and the private key can be used for generating a unique anonymous signature. In case of a double spend attempt these two signatures will be linked together, but revealing the signer is not necessary for our purposes. 4.2 Definitions 4.2.1 Elliptic curve parameters As our base signature algorithm we chose to use the fast scheme EdDSA, which is developed and implemented by D.J. Bernstein et al. [18]. Like Bitcoin’s ECDSA it is based on the elliptic curve discrete logarithm problem, so our scheme could also be applied to Bitcoin in future. Common parameters are: \(q\): a prime number; \(q = 2^{255} - 19\); \(d\): an element of \(\mathbb{F}_q\); \(d = -121665/121666\); \(E\): an elliptic curve equation; \(-x^2 + y^2 = 1 + dx^2y^2\); \(G\): a base point; \(G = (x, -4/5)\); \(l\): a prime order of the base point; \(l = 2^{252} + 27742317777372353535851937790883648493\); \(H_s\): a cryptographic hash function \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): a deterministic hash function \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\). 4.2.2 Terminology Enhanced privacy requires a new terminology which should not be confused with Bitcoin entities. private ec-key is a standard elliptic curve private key: a number \(a \in [1, l - 1]\); public ec-key is a standard elliptic curve public key: a point \(A = aG\); one-time keypair is a pair of private and public ec-keys; 5 10 Linkability in the sense of "linkable ring signatures" means we can tell if two outgoing transactions came from the same source without revealing who the source is. The authors weakened linkability so as to (a) preserve privacy, but still (b) spot any transaction using a private key a second time as invalid. Okay, so this is an order-of-events question. Consider the following scenario. My mining computer will have the current blockchain, it will have it’s own block of transactions it calls legitimate, it will be working on that block in a proof-of-work puzzle, and it will have a list of pending transactions to be added to the next block. It will also be sending any new transactions into that pool of pending transactions. If I do not solve the next block, but someone else does, I get an updated copy of the blockchain. The block I was working on and my list of pending transactions both may have some transactions that are now incorporated into the blockchain. Unravel my pending block, combine that with my list of pending transactions, and call that my pool of pending transactions. Remove any that are now officially in the blockchain. Now, what do I do? Should I first go through and "remove all double-spends"? On the other hand, should I search through the list and make sure that each private key has not yet been used, and if it has been used already in my list, then I received the first copy first, and hence any further copy is illegitimate. Thus I proceed to simply delete all instances after the first of the the same private key. Algebraic geometry has never been my strong suit. http://en.wikipedia.org/wiki/EdDSA Such speed, much wow. THIS is algebraic geometry for the win. Not that I’d know anything about that. Problematically, or not, discrete logs are getting very fast. And quantum computers eat them for breakfast. http://link.springer.com/article/10.1007/s13389-012-0027-1 This becomes a really important number, but there is no explanation or citation to how it was chosen. Simply choosing a single known large prime would be fine, but if there are known facts about this large prime, that could influence our choice. Different variants of cryptonote could choose different values of ell, but there is no discussion in this paper about how that choice will affect our choices of other global parameters listed on page 5. This paper needs a section on choosing parameter values.
private user key is a pair \((a, b)\) of two different private ec-keys; tracking key is a pair \((a, B)\) of private and public ec-key (where \(B = bG\) and \(a \neq b\)); public user key is a pair \((A, B)\) of two public ec-keys derived from \((a, b)\); standard address is a representation of a public user key given into human friendly string with error correction; truncated address is a representation of the second half (point \(B\)) of a public user key given into human friendly string with error correction. The transaction structure remains similar to the structure in Bitcoin: every user can choose several independent incoming payments (transactions outputs), sign them with the corresponding private keys and send them to different destinations. Contrary to Bitcoin’s model, where a user possesses unique private and public key, in the proposed model a sender generates a one-time public key based on the recipient’s address and some random data. In this sense, an incoming transaction for the same recipient is sent to a one-time public key (not directly to a unique address) and only the recipient can recover the corresponding private part to redeem his funds (using his unique private key). The recipient can spend the funds using a ring signature, keeping his ownership and actual spending anonymous. The details of the protocol are explained in the next subsections. 4.3 Unlinkable payments Classic Bitcoin addresses, once being published, become unambiguous identifier for incoming payments, linking them together and tying to the recipient’s pseudonyms. If someone wants to receive an “untied” transaction, he should convey his address to the sender by a private channel. If he wants to receive different transactions which cannot be proven to belong to the same owner he should generate all the different addresses and never publish them in his own pseudonym. Public Private Alice Carol Bob’s addr 1 Bob’s addr 2 Bob’s key 1 Bob’s key 2 Bob Fig. 2. Traditional Bitcoin keys/transactions model. We propose a solution allowing a user to publish a single address and receive unconditional unlinkable payments. The destination of each CryptoNote output (by default) is a public key, derived from recipient’s address and sender’s random data. The main advantage against Bitcoin is that every destination key is unique by default (unless the sender uses the same data for each of his transactions to the same recipient). Hence, there is no such issue as “address reuse” by design and no observer can determine if any transactions were sent to a specific address or link two addresses together. 6 private user key is a pair \((a, b)\) of two different private ec-keys; tracking key is a pair \((a, B)\) of private and public ec-key (where \(B = bG\) and \(a \neq b\)); public user key is a pair \((A, B)\) of two public ec-keys derived from \((a, b)\); standard address is a representation of a public user key given into human friendly string with error correction; truncated address is a representation of the second half (point \(B\)) of a public user key given into human friendly string with error correction. The transaction structure remains similar to the structure in Bitcoin: every user can choose several independent incoming payments (transactions outputs), sign them with the corresponding private keys and send them to different destinations. Contrary to Bitcoin’s model, where a user possesses unique private and public key, in the proposed model a sender generates a one-time public key based on the recipient’s address and some random data. In this sense, an incoming transaction for the same recipient is sent to a one-time public key (not directly to a unique address) and only the recipient can recover the corresponding private part to redeem his funds (using his unique private key). The recipient can spend the funds using a ring signature, keeping his ownership and actual spending anonymous. The details of the protocol are explained in the next subsections. 4.3 Unlinkable payments Classic Bitcoin addresses, once being published, become unambiguous identifier for incoming payments, linking them together and tying to the recipient’s pseudonyms. If someone wants to receive an “untied” transaction, he should convey his address to the sender by a private channel. If he wants to receive different transactions which cannot be proven to belong to the same owner he should generate all the different addresses and never publish them in his own pseudonym. Public Private Alice Carol Bob’s addr 1 Bob’s addr 2 Bob’s key 1 Bob’s key 2 Bob Fig. 2. Traditional Bitcoin keys/transactions model. We propose a solution allowing a user to publish a single address and receive unconditional unlinkable payments. The destination of each CryptoNote output (by default) is a public key, derived from recipient’s address and sender’s random data. The main advantage against Bitcoin is that every destination key is unique by default (unless the sender uses the same data for each of his transactions to the same recipient). Hence, there is no such issue as “address reuse” by design and no observer can determine if any transactions were sent to a specific address or link two addresses together. 6 11 So this is like Bitcoin, but with infinite, anonymous PO Boxes, redeemable only by the receiver generating a private key that is as anonymous as a ring signature can be. Bitcoin works this way. If Alex has 0.112 Bitcoin in her wallet she just received from Frank, she really has a signed message "I, [FRANK], send 0.112 Bitcoin to [alex] + H0 + N0" where 1) Frank has signed the message with his private key [FRANK], 2) Frank has signed the message with Alex’s public key, [alex], 3) Frank has included some form of the history of the bitcoin, H0, and 4) Frank includes a random bit of data called the nonce, N0. If Alex then wants to send 0.011 Bitcoin to Charlene, she will take Frank’s message, and she will set that to H1, and sign two messages: one for her transaction, and one for the change. H1= "I, [FRANK], send 0.112 Bitcoin to [alex] + H0 + N" "I, [ALEX], send 0.011 Bitcoin to [charlene] + H1 + N1" "I, [ALEX], send 0.101 Bitcoin as change to [alex] + H1 + N2." where Alex signs both messages with her private key [ALEX], the first message with Charlene’s public key [charlene], the second message with Alex’s public key [alex], and including the histories and some randomly generated nonces N1 and N2 appropriately. Cryptonote works this way: If Alex has 0.112 Cryptonote in her wallet she just received from Frank, she really has a signed message "I, [someone in an ad-hoc group], send 0.112 Cryptonote to [a one-time address] + H0 + N0." Alex discovered that this was her money by checking her private key [ALEX] against [a one-time address] for every passing message, and if she wishes to spend it she does so in the following way. She chooses a recipient of the money, perhaps Charlene has started voting for drone-strikes so Alex wants to send money to Brenda instead. So Alex looks up Brenda’s public key, [brenda], and uses her own private key, [ALEX], to generate a one-time address [ALEX+brenda]. She then chooses an arbitrary collection C from the network of cryptonote users and she constructs a ring signature from this ad-hoc group. We set our history as the previous message, add nonces, and proceed as usual? H1 = "I, [someone in an ad-hoc group], send 0.112 Cryptonote to [a one-time address] + H0 + N0." "I, [someone in the collection C], send 0.011 Cryptonote to [one-time-address-made-fromALEX+brenda] + H1 + N1" "I, [someone in the collection C], send 0.101 Cryptonote as change to [one-time-address-madefrom-ALEX+alex] + H1 + N2" Now, Alex and Brenda both scan all incoming messages for any one-time-addresses that were created using their key. If they find any, then that message is their very own brand new cryptonote! And even then, the transaction will still hit the blockchain. If the coins entering that address are known to be sent from criminals, political contributors, or from committees and accounts with strict budgets (i.e. embezzling), or if the new owner of these coins ever makes a mistake and sends these coins to a common address with coins he is known to own, the anonymity jig is up in bitcoin.
private user key is a pair \((a, b)\) of two different private ec-keys; tracking key is a pair \((a, B)\) of private and public ec-key (where \(B = bG\) and \(a \neq b\)); public user key is a pair \((A, B)\) of two public ec-keys derived from \((a, b)\); standard address is a representation of a public user key given into human friendly string with error correction; truncated address is a representation of the second half (point \(B\)) of a public user key given into human friendly string with error correction. The transaction structure remains similar to the structure in Bitcoin: every user can choose several independent incoming payments (transactions outputs), sign them with the corresponding private keys and send them to different destinations. Contrary to Bitcoin’s model, where a user possesses unique private and public key, in the proposed model a sender generates a one-time public key based on the recipient’s address and some random data. In this sense, an incoming transaction for the same recipient is sent to a one-time public key (not directly to a unique address) and only the recipient can recover the corresponding private part to redeem his funds (using his unique private key). The recipient can spend the funds using a ring signature, keeping his ownership and actual spending anonymous. The details of the protocol are explained in the next subsections. 4.3 Unlinkable payments Classic Bitcoin addresses, once being published, become unambiguous identifier for incoming payments, linking them together and tying to the recipient’s pseudonyms. If someone wants to receive an “untied” transaction, he should convey his address to the sender by a private channel. If he wants to receive different transactions which cannot be proven to belong to the same owner he should generate all the different addresses and never publish them in his own pseudonym. Public Private Alice Carol Bob’s addr 1 Bob’s addr 2 Bob’s key 1 Bob’s key 2 Bob Fig. 2. Traditional Bitcoin keys/transactions model. We propose a solution allowing a user to publish a single address and receive unconditional unlinkable payments. The destination of each CryptoNote output (by default) is a public key, derived from recipient’s address and sender’s random data. The main advantage against Bitcoin is that every destination key is unique by default (unless the sender uses the same data for each of his transactions to the same recipient). Hence, there is no such issue as “address reuse” by design and no observer can determine if any transactions were sent to a specific address or link two addresses together. 6 private user key is a pair \((a, b)\) of two different private ec-keys; tracking key is a pair \((a, B)\) of private and public ec-key (where \(B = bG\) and \(a \neq b\)); public user key is a pair \((A, B)\) of two public ec-keys derived from \((a, b)\); standard address is a representation of a public user key given into human friendly string with error correction; truncated address is a representation of the second half (point \(B\)) of a public user key given into human friendly string with error correction. The transaction structure remains similar to the structure in Bitcoin: every user can choose several independent incoming payments (transactions outputs), sign them with the corresponding private keys and send them to different destinations. Contrary to Bitcoin’s model, where a user possesses unique private and public key, in the proposed model a sender generates a one-time public key based on the recipient’s address and some random data. In this sense, an incoming transaction for the same recipient is sent to a one-time public key (not directly to a unique address) and only the recipient can recover the corresponding private part to redeem his funds (using his unique private key). The recipient can spend the funds using a ring signature, keeping his ownership and actual spending anonymous. The details of the protocol are explained in the next subsections. 4.3 Unlinkable payments Classic Bitcoin addresses, once being published, become unambiguous identifier for incoming payments, linking them together and tying to the recipient’s pseudonyms. If someone wants to receive an “untied” transaction, he should convey his address to the sender by a private channel. If he wants to receive different transactions which cannot be proven to belong to the same owner he should generate all the different addresses and never publish them in his own pseudonym. Public Private Alice Carol Bob’s addr 1 Bob’s addr 2 Bob’s key 1 Bob’s key 2 Bob Fig. 2. Traditional Bitcoin keys/transactions model. We propose a solution allowing a user to publish a single address and receive unconditional unlinkable payments. The destination of each CryptoNote output (by default) is a public key, derived from recipient’s address and sender’s random data. The main advantage against Bitcoin is that every destination key is unique by default (unless the sender uses the same data for each of his transactions to the same recipient). Hence, there is no such issue as “address reuse” by design and no observer can determine if any transactions were sent to a specific address or link two addresses together. 6 12 Hence, rather than users sending coins from address (which is really a public key) to address (another public key) using their private keys, users are sending coins from one-time PO-box (which is generating using your friends public key) to one-time PO-box (similarly) using your own private keys. In a sense, we’re saying "Okay, everyone take your hands offthe money while it’s being transferred around! It’s simply enough to know that our keys can open that box and that we know how much money is in the box. Never put your fingerprints on the PO Box or actually use it, just trade the box filled with cash itself. That way we don’t know who sent what, but the contents of these public addresses are still frictionless, fungible, divisible, and still possess all the other nice qualities of money we desire like bitcoin." An infinite set of PO boxes. You publish an address, I have a private key. I use my private key and your address, and some random data, to generate a public key. The algorithm is designed such that, since your address was used to generate the public key, only YOUR private key works to unlock the message. An observer, Eve, sees you publish your address, and sees the public key I announce. However, she doesn’t know if I announced my public key based on your address or hers, or Brenda’s or Charlene’s, or whoever’s. She checks her private key against the public key I announced and sees it doesn’t work; it isn’t her money. She doens’t know anyone else’s private key, and only the recipient of the message has the private key that can unlock the message. So no one listening in can determine who received the money much less take the money.
Public Private Alice Carol One-time key One-time key One-time key Bob Bob’s Key Bob’s Address Fig. 3. CryptoNote keys/transactions model. First, the sender performs a Diffie-Hellman exchange to get a shared secret from his data and half of the recipient’s address. Then he computes a one-time destination key, using the shared secret and the second half of the address. Two different ec-keys are required from the recipient for these two steps, so a standard CryptoNote address is nearly twice as large as a Bitcoin wallet address. The receiver also performs a Diffie-Hellman exchange to recover the corresponding secret key. A standard transaction sequence goes as follows: 1. Alice wants to send a payment to Bob, who has published his standard address. She unpacks the address and gets Bob’s public key \((A, B)\). 2. Alice generates a random \(r \in [1, l-1]\) and computes a one-time public key \(P = H_s(rA)G + B\). 3. Alice uses \(P\) as a destination key for the output and also packs value \(R = rG\) (as a part of the Diffie-Hellman exchange) somewhere into the transaction. Note that she can create other outputs with unique public keys: different recipients’ keys \((A_i, B_i)\) imply different \(P_i\) even with the same \(r\). Transaction Tx public key Tx output Amount Destination key \(R = rG\) \(P = H_s(rA)G + B\) Receiver’s public key Sender’s random data \(r\) \((A, B)\) Fig. 4. Standard transaction structure. 4. Alice sends the transaction. 5. Bob checks every passing transaction with his private key \((a, b)\), and computes \(P' = H_s(aR)G + B\). If Alice’s transaction for with Bob as the recipient was among them, then \(aR = arG = rA\) and \(P' = P\). 7 Public Private Alice Carol One-time key One-time key One-time key Bob Bob’s Key Bob’s Address Fig. 3. CryptoNote keys/transactions model. First, the sender performs a Diffie-Hellman exchange to get a shared secret from his data and half of the recipient’s address. Then he computes a one-time destination key, using the shared secret and the second half of the address. Two different ec-keys are required from the recipient for these two steps, so a standard CryptoNote address is nearly twice as large as a Bitcoin wallet address. The receiver also performs a Diffie-Hellman exchange to recover the corresponding secret key. A standard transaction sequence goes as follows: 1. Alice wants to send a payment to Bob, who has published his standard address. She unpacks the address and gets Bob’s public key \((A, B)\). 2. Alice generates a random \(r \in [1, l-1]\) and computes a one-time public key \(P = H_s(rA)G + B\). 3. Alice uses \(P\) as a destination key for the output and also packs value \(R = rG\) (as a part of the Diffie-Hellman exchange) somewhere into the transaction. Note that she can create other outputs with unique public keys: different recipients’ keys \((A_i, B_i)\) imply different \(P_i\) even with the same \(r\). Transaction Tx public key Tx output Amount Destination key \(R = rG\) \(P = H_s(rA)G + B\) Receiver’s public key Sender’s random data \(r\) \((A, B)\) Fig. 4. Standard transaction structure. 4. Alice sends the transaction. 5. Bob checks every passing transaction with his private key \((a, b)\), and computes \(P' = H_s(aR)G + B\). If Alice’s transaction for with Bob as the recipient was among them, then \(aR = arG = rA\) and \(P' = P\). 7 13 I wonder how much of a pain in the neck it would be to implement a choice of cryptography scheme. Elliptic or otherwise. So if some scheme is broken in the future, the currency switches without concern. Probably a big pain in the ass. Okay, this is exactly what I just explained in my previous comment. The Diffie-Hellman-type exchanges are neato. Say Alex and Brenda each have a secret number, A and B, and a number they don’t care about keeping secret, a and b. They wish to generate a shared secret without Eva discovering it. Diffie and Hellman came up with a way for Alex and Brenda to share the public numbers a and b, but not the private numbers A and B, and generate a shared secret, K. Using this shared secret, K, without any Eva listening in being able to generate the same K, Alex and Brenda can now use K as a secret encryption key and pass secret messages back and forth. Here’s how it CAN work, although it should work with much larger numbers than 100. We’ll use 100 because working over the integers modulo 100 is equivalent to "throwing out all but the last two digit of a number." Alex and Brenda each choose A, a, B, and b. They keep A and B secret. Alex tells Brenda her value of a modulo 100 (just the last two digits) and Brenda tells Alex her value of b modulo 100. Now Eva knows (a,b) modulo 100. But Alex knows (a,b,A) so she can compute x=abA modulo 100. Alex chops offall but the last digit because we’re working under the integers modulo 100 again. Similarly, Brenda knows (a,b,B) so she can compute y=abB modulo 100. Alex can now publish x and Brenda can publish y. But now Alex can compute yA = abBA modulo 100, and Brenda can compute xB = abBA modulo 100. They both know the same number! But all Eva has heard is (a,b,abA,abB). She has no easy way of computing abA*B. Now, this is the easiest and least secure way of thinking about the Diffie-Hellman exchange. More secure versions exist. But most versions work because integer factorization and discrete logarithms are difficult, and both of those problems are easily solved by quantum computers. I will look into whether any versions that are resistant to quantum exist. http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange The "standard txn sequence" listed here is missing a whole bunch of steps, like SIGNATURES. They’re just taken for granted in here. Which is really bad, because the order in which we sign stuff, the information included in the signed message, and so on... all of this is extremely important to the protocol. Getting one or two of the steps wrong, even slightly out of order, while implementing "the standard transaction sequence" could throw the security of the whole system into question. Furthermore, the proofs presented later in the paper may not be sufficiently rigorous if the framework under which they work is as loosely defined as in this section.
Public Private Alice Carol One-time key One-time key One-time key Bob Bob’s Key Bob’s Address Fig. 3. CryptoNote keys/transactions model. First, the sender performs a Diffie-Hellman exchange to get a shared secret from his data and half of the recipient’s address. Then he computes a one-time destination key, using the shared secret and the second half of the address. Two different ec-keys are required from the recipient for these two steps, so a standard CryptoNote address is nearly twice as large as a Bitcoin wallet address. The receiver also performs a Diffie-Hellman exchange to recover the corresponding secret key. A standard transaction sequence goes as follows: 1. Alice wants to send a payment to Bob, who has published his standard address. She unpacks the address and gets Bob’s public key \((A, B)\). 2. Alice generates a random \(r \in [1, l-1]\) and computes a one-time public key \(P = H_s(rA)G + B\). 3. Alice uses \(P\) as a destination key for the output and also packs value \(R = rG\) (as a part of the Diffie-Hellman exchange) somewhere into the transaction. Note that she can create other outputs with unique public keys: different recipients’ keys \((A_i, B_i)\) imply different \(P_i\) even with the same \(r\). Transaction Tx public key Tx output Amount Destination key \(R = rG\) \(P = H_s(rA)G + B\) Receiver’s public key Sender’s random data \(r\) \((A, B)\) Fig. 4. Standard transaction structure. 4. Alice sends the transaction. 5. Bob checks every passing transaction with his private key \((a, b)\), and computes \(P' = H_s(aR)G + B\). If Alice’s transaction for with Bob as the recipient was among them, then \(aR = arG = rA\) and \(P' = P\). 7 Public Private Alice Carol One-time key One-time key One-time key Bob Bob’s Key Bob’s Address Fig. 3. CryptoNote keys/transactions model. First, the sender performs a Diffie-Hellman exchange to get a shared secret from his data and half of the recipient’s address. Then he computes a one-time destination key, using the shared secret and the second half of the address. Two different ec-keys are required from the recipient for these two steps, so a standard CryptoNote address is nearly twice as large as a Bitcoin wallet address. The receiver also performs a Diffie-Hellman exchange to recover the corresponding secret key. A standard transaction sequence goes as follows: 1. Alice wants to send a payment to Bob, who has published his standard address. She unpacks the address and gets Bob’s public key \((A, B)\). 2. Alice generates a random \(r \in [1, l-1]\) and computes a one-time public key \(P = H_s(rA)G + B\). 3. Alice uses \(P\) as a destination key for the output and also packs value \(R = rG\) (as a part of the Diffie-Hellman exchange) somewhere into the transaction. Note that she can create other outputs with unique public keys: different recipients’ keys \((A_i, B_i)\) imply different \(P_i\) even with the same \(r\). Transaction Tx public key Tx output Amount Destination key \(R = rG\) \(P = H_s(rA)G + B\) Receiver’s public key Sender’s random data \(r\) \((A, B)\) Fig. 4. Standard transaction structure. 4. Alice sends the transaction. 5. Bob checks every passing transaction with his private key \((a, b)\), and computes \(P' = H_s(aR)G + B\). If Alice’s transaction for with Bob as the recipient was among them, then \(aR = arG = rA\) and \(P' = P\). 7 14 Note that the author(s?) do a terrible job of keeping their terminology straight throughout the text, but especially in this next bit. Next incarnation of this paper will necessarily be much more rigorous. In the text they refer to P as their one-time public key. In the diagram, they refer to R as their "Tx public key" and P as their "Destination key." If I were going to re-write this, I’d very specifically lay out some terminology before discussing these sections. This ell is massive. See page 5. Who chooses ell? Diagram illustrates that the transaction public key \(R = rG\), which is random and chosen by the sender, is not part of Tx output. This is because it could be the same for multiple transactions to multiple people, and isn’t used LATER to spend. A fresh R is generated every time you want to broadcast a new CryptoNote transaction. Furthermore, R is only used to check if you are the recipient of the transaction. It’s not junk data, but it’s junk to anyone without the private keys associated with (A,B). The Destination key, on the other hand, \(P = H_s(rA)G + B\) is part of Tx output. Everyone rifling through every passing transaction’s data must check their own generated P* against this P to see if they own this passing transaction. Anyone with an unspent transaction output (UTXO) will have a bunch of these Ps laying around with amounts. In order to spend, they sign some new message including P. Alice must sign this transaction with one-time private key(s) associated with the unspent transaction output(s) Destination Key(s). Each destination key owned by Alice comes equipped with a one-time private key also owned (presumably) by Alice. Every time Alice wants to send the contents of a destination key to me, or Bob, or Brenda, or Charlie or Charlene, she uses her private key to sign the transaction. Upon receipt of transaction, I will receive a new Tx public key, a new Destination public key, and I will be able to recover a new one-time private key x. Combining my one-time private key, x, with new transaction’s public Destination key(s) is how we send a new transaction
- Bob can recover the corresponding one-time private key: \(x = H_s(aR) + b\), so as \(P = xG\). He can spend this output at any time by signing a transaction with \(x\). Transaction Tx public key Tx output Amount Destination key \(P' = H_s(aR)G + bG\) one-time public key \(x = H_s(aR) + b\) one-time private key Receiver’s private key \((a, b)\) \(R\) \(P'\) \(\stackrel{?}{=} P\) Fig. 5. Incoming transaction check. As a result Bob gets incoming payments, associated with one-time public keys which are unlinkable for a spectator. Some additional notes: • When Bob “recognizes” his transactions (see step 5) he practically uses only half of his private information: \((a, B)\). This pair, also known as the tracking key, can be passed to a third party (Carol). Bob can delegate her the processing of new transactions. Bob doesn’t need to explicitly trust Carol, because she can’t recover the one-time secret key \(p\) without Bob’s full private key \((a, b)\). This approach is useful when Bob lacks bandwidth or computation power (smartphones, hardware wallets etc.). • In case Alice wants to prove she sent a transaction to Bob’s address she can either disclose \(r\) or use any kind of zero-knowledge protocol to prove she knows \(r\) (for example by signing the transaction with \(r\)). • If Bob wants to have an audit compatible address where all incoming transaction are linkable, he can either publish his tracking key or use a truncated address. That address represent only one public ec-key \(B\), and the remaining part required by the protocol is derived from it as follows: \(a = H_s(B)\) and \(A = H_s(B)G\). In both cases every person is able to “recognize” all of Bob’s incoming transaction, but, of course, none can spend the funds enclosed within them without the secret key \(b\). 4.4 One-time ring signatures A protocol based on one-time ring signatures allows users to achieve unconditional unlinkability. Unfortunately, ordinary types of cryptographic signatures permit to trace transactions to their respective senders and receivers. Our solution to this deficiency lies in using a different signature type than those currently used in electronic cash systems. We will first provide a general description of our algorithm with no explicit reference to electronic cash. A one-time ring signature contains four algorithms: (GEN, SIG, VER, LNK): GEN: takes public parameters and outputs an ec-pair \((P, x)\) and a public key \(I\). SIG: takes a message \(m\), a set \(S'\) of public keys \(\{P_i\}_{i \neq s}\), a pair \((P_s, x_s)\) and outputs a signature \(\sigma\) and a set \(S = S' \cup \{P_s\}\). 8
-
Bob can recover the corresponding one-time private key: \(x = H_s(aR) + b\), so as \(P = xG\). He can spend this output at any time by signing a transaction with \(x\). Transaction Tx public key Tx output Amount Destination key \(P' = H_s(aR)G + bG\) one-time public key \(x = H_s(aR) + b\) one-time private key Receiver’s private key \((a, b)\) \(R\) \(P'\) \(\stackrel{?}{=} P\) Fig. 5. Incoming transaction check. As a result Bob gets incoming payments, associated with one-time public keys which are unlinkable for a spectator. Some additional notes: • When Bob “recognizes” his transactions (see step 5) he practically uses only half of his private information: \((a, B)\). This pair, also known as the tracking key, can be passed to a third party (Carol). Bob can delegate her the processing of new transactions. Bob doesn’t need to explicitly trust Carol, because she can’t recover the one-time secret key \(p\) without Bob’s full private key \((a, b)\). This approach is useful when Bob lacks bandwidth or computation power (smartphones, hardware wallets etc.). • In case Alice wants to prove she sent a transaction to Bob’s address she can either disclose \(r\) or use any kind of zero-knowledge protocol to prove she knows \(r\) (for example by signing the transaction with \(r\)). • If Bob wants to have an audit compatible address where all incoming transaction are linkable, he can either publish his tracking key or use a truncated address. That address represent only one public ec-key \(B\), and the remaining part required by the protocol is derived from it as follows: \(a = H_s(B)\) and \(A = H_s(B)G\). In both cases every person is able to “recognize” all of Bob’s incoming transaction, but, of course, none can spend the funds enclosed within them without the secret key \(b\). 4.4 One-time ring signatures A protocol based on one-time ring signatures allows users to achieve unconditional unlinkability. Unfortunately, ordinary types of cryptographic signatures permit to trace transactions to their respective senders and receivers. Our solution to this deficiency lies in using a different signature type than those currently used in electronic cash systems. We will first provide a general description of our algorithm with no explicit reference to electronic cash. A one-time ring signature contains four algorithms: (GEN, SIG, VER, LNK): GEN: takes public parameters and outputs an ec-pair \((P, x)\) and a public key \(I\). SIG: takes a message \(m\), a set \(S'\) of public keys \(\{P_i\}_{i \neq s}\), a pair \((P_s, x_s)\) and outputs a signature \(\sigma\) and a set \(S = S' \cup \{P_s\}\). 8 15 What does an unspent transaction output look like here? The diagram suggests that transaction output consists only of two data points: amount and destination key. But this isn’t sufficient because when I try to spend this "output" I will still need to know R=rG. Remember, r is chosen by the sender, and R is a) used to recognize incoming cryptonotes as your own and b) used to generate the one-time private key used to "claim" your cryptonote. The part about this that I don’t understand? Taking the theoretical "okay, we have these signatures and transactions, and we pass ’em back and forth" into the world of programming "okay what information specifically makes up an individual UTXO?" Best way to answer that question is to dig into the body of completely uncommented code. Way to go, bytecoin team. Recall: linkability means "did the same person send?" and unlinkability means "did the same person receive?". So a system can be linkable or non-linkable, unlinkable or non-unlinkable. Annoying, I know. So when Nic van Saberhagen here says "...incoming payments [are] associated with one-time public keys which are unlinkable for a spectator," let’s see what he means. First, consider a situation in which Alice sends Bob two separate transactions from the same address to the same address. In the Bitcoin universe, Alice has already made the mistake of sending from the same address and so the transaction has failed our desire for limited linkability. Furthermore, since she sent the money to the same address, she’s failed our desire for unlinkability. This bitcoin transaction was both (totally) linkable and non-unlinkable. On the other hand, in the cryptonote universe, let’s say that Alice sends Bob some cryptonote, using Bob’s public address. She chooses as her obfuscating set of public keys all known public keys in the Washington DC metro area. Alex generates a one-time public key using her own information and Bob’s public information. She sends the money off, and any observer will only be able to glean "Someone from the Washington DC metro area sent 2.3 cryptonotes to the one-time public address XYZ123." We have a probabilistic control over linkability here, so we’ll call this "almost non-linkable." We also only see the one-time public keys money is sent to. Even if we suspected the receiver was Bob, we don’t have his private keys and so we can’t test whether a passing transaction belongs to Bob let alone generate his one-time private key to redeem his cryptonote. So this is, in fact, totally "unlinkable." So, this is the neatest trick of all. Who wants to really trust another MtGox? We may be comfortable storing some amount of BTC on Coinbase, but the ultimate in bitcoin security is a physical wallet. Which is inconvenient. In this case, you can trustlessly give away half of your private key without compromising your own ability to spend money. When doing this, all you are doing is telling someone how to break unlinkability. The other properties of CN acting like a currency are preserved, like proof against double spending and whatnot.
-
Bob can recover the corresponding one-time private key: \(x = H_s(aR) + b\), so as \(P = xG\). He can spend this output at any time by signing a transaction with \(x\). Transaction Tx public key Tx output Amount Destination key \(P' = H_s(aR)G + bG\) one-time public key \(x = H_s(aR) + b\) one-time private key Receiver’s private key \((a, b)\) \(R\) \(P'\) \(\stackrel{?}{=} P\) Fig. 5. Incoming transaction check. As a result Bob gets incoming payments, associated with one-time public keys which are unlinkable for a spectator. Some additional notes: • When Bob “recognizes” his transactions (see step 5) he practically uses only half of his private information: \((a, B)\). This pair, also known as the tracking key, can be passed to a third party (Carol). Bob can delegate her the processing of new transactions. Bob doesn’t need to explicitly trust Carol, because she can’t recover the one-time secret key \(p\) without Bob’s full private key \((a, b)\). This approach is useful when Bob lacks bandwidth or computation power (smartphones, hardware wallets etc.). • In case Alice wants to prove she sent a transaction to Bob’s address she can either disclose \(r\) or use any kind of zero-knowledge protocol to prove she knows \(r\) (for example by signing the transaction with \(r\)). • If Bob wants to have an audit compatible address where all incoming transaction are linkable, he can either publish his tracking key or use a truncated address. That address represent only one public ec-key \(B\), and the remaining part required by the protocol is derived from it as follows: \(a = H_s(B)\) and \(A = H_s(B)G\). In both cases every person is able to “recognize” all of Bob’s incoming transaction, but, of course, none can spend the funds enclosed within them without the secret key \(b\). 4.4 One-time ring signatures A protocol based on one-time ring signatures allows users to achieve unconditional unlinkability. Unfortunately, ordinary types of cryptographic signatures permit to trace transactions to their respective senders and receivers. Our solution to this deficiency lies in using a different signature type than those currently used in electronic cash systems. We will first provide a general description of our algorithm with no explicit reference to electronic cash. A one-time ring signature contains four algorithms: (GEN, SIG, VER, LNK): GEN: takes public parameters and outputs an ec-pair \((P, x)\) and a public key \(I\). SIG: takes a message \(m\), a set \(S'\) of public keys \(\{P_i\}_{i \neq s}\), a pair \((P_s, x_s)\) and outputs a signature \(\sigma\) and a set \(S = S' \cup \{P_s\}\). 8
- Bob can recover the corresponding one-time private key: \(x = H_s(aR) + b\), so as \(P = xG\). He can spend this output at any time by signing a transaction with \(x\). Transaction Tx public key Tx output Amount Destination key \(P' = H_s(aR)G + bG\) one-time public key \(x = H_s(aR) + b\) one-time private key Receiver’s private key \((a, b)\) \(R\) \(P'\) \(\stackrel{?}{=} P\) Fig. 5. Incoming transaction check. As a result Bob gets incoming payments, associated with one-time public keys which are unlinkable for a spectator. Some additional notes: • When Bob “recognizes” his transactions (see step 5) he practically uses only half of his private information: \((a, B)\). This pair, also known as the tracking key, can be passed to a third party (Carol). Bob can delegate her the processing of new transactions. Bob doesn’t need to explicitly trust Carol, because she can’t recover the one-time secret key \(p\) without Bob’s full private key \((a, b)\). This approach is useful when Bob lacks bandwidth or computation power (smartphones, hardware wallets etc.). • In case Alice wants to prove she sent a transaction to Bob’s address she can either disclose \(r\) or use any kind of zero-knowledge protocol to prove she knows \(r\) (for example by signing the transaction with \(r\)). • If Bob wants to have an audit compatible address where all incoming transaction are linkable, he can either publish his tracking key or use a truncated address. That address represent only one public ec-key \(B\), and the remaining part required by the protocol is derived from it as follows: \(a = H_s(B)\) and \(A = H_s(B)G\). In both cases every person is able to “recognize” all of Bob’s incoming transaction, but, of course, none can spend the funds enclosed within them without the secret key \(b\). 4.4 One-time ring signatures A protocol based on one-time ring signatures allows users to achieve unconditional unlinkability. Unfortunately, ordinary types of cryptographic signatures permit to trace transactions to their respective senders and receivers. Our solution to this deficiency lies in using a different signature type than those currently used in electronic cash systems. We will first provide a general description of our algorithm with no explicit reference to electronic cash. A one-time ring signature contains four algorithms: (GEN, SIG, VER, LNK): GEN: takes public parameters and outputs an ec-pair \((P, x)\) and a public key \(I\). SIG: takes a message \(m\), a set \(S'\) of public keys \(\{P_i\}_{i \neq s}\), a pair \((P_s, x_s)\) and outputs a signature \(\sigma\) and a set \(S = S' \cup \{P_s\}\). 8 16 Yes, so now we have a) a payment address and b) a payment ID. A critic could ask "do we really need to do this? After all, if a merchant receives 112.00678952 CN exactly, and that was my order, and I have a screenshot or a receipt or whatever, isn’t that insane degree of precision sufficient?" The answer is "maybe, most of the time, in day-to-day, face-to-face transactions." However, the more common situation (especially in the digial world) is this: a merchant sells a set of objects, each with a fixed price. Say object A is 0.001 CN, object B is 0.01 CN and object C is 0.1 CN. Now, if the merchant receives an order for 1.618 CN, there are many many (many!) ways to arrange an order for a customer. And so without some sort of payment ID, identifying the so-called "unique" order of a customer with the so-called "unique" cost of their order becomes impossible. Even funnier: if everything in my online store costs exactly 1.0 CN, and I get 1000 customers a day? And you want to prove that you bought exactly 3 objects two weeks ago? Without a payment ID? Good luck, buddy. Long story short: When Bob publishes a payment address, he may end up also publishing a payment ID as well (see, e.g. Poloniex XMR deposits). This is different than what is described in the text here where Alice is the one who generates the payment ID. There must be some way for Bob to generate a payment ID as well. \((a, B)\) Recall that the tracking key \((a, B)\) can be published; losing the secrecy of the value for ’a’ will not violate your ability to spend or allow folks to steal from you (I think... that would have to be proven), it will simply allow folks to see all incoming transactions. A truncated address, as described in this paragraph, simply takes the "private" part of the key and generates it from the "public" part. Revealing the value for ’a’ will remove non-linkability but will preserve the rest of the transactions. The author means "not unlinkable" because unlinkable refers to the receiver and linkable refers to the sender. It’s also clear the author didn’t realize that there were two different aspects to linkability. Since, after all, the transaction is a directed object on a graph, there will be two questions: "are these two transactions going to the same person?" and "are these two transactions coming from the same person?" This is a "no-going-back" policy under which the unlinkability property of CryptoNote is conditional. That is to say, Bob can choose his incoming transactions to be not unlinkable using this policy. This is a claim they prove under the Random Oracle Model. We’ll get to that; the Random Oracle has pros and cons.
VER: takes a message \(m\), a set \(S\), a signature \(\sigma\) and outputs "true" or "false". LNK: takes a set \(I = \{I_i\}\), a signature \(\sigma\) and outputs "linked" or "indep". The idea behind the protocol is fairly simple: a user produces a signature which can be checked by a set of public keys rather than a unique public key. The identity of the signer is indistinguishable from the other users whose public keys are in the set until the owner produces a second signature using the same keypair. Private keys \(x_0\) \(\cdots\) \(x_i\) \(\cdots\) \(x_n\) Public keys \(P_0\) \(\cdots\) \(P_i\) \(\cdots\) \(P_n\) Ring Signature sign verify Fig. 6. Ring signature anonymity. GEN: The signer picks a random secret key \(x \in [1, l-1]\) and computes the corresponding public key \(P = xG\). Additionally he computes another public key \(I = xH_p(P)\) which we will call the “key image”. SIG: The signer generates a one-time ring signature with a non-interactive zero-knowledge proof using the techniques from [21]. He selects a random subset \(S'\) of \(n\) from the other users’ public keys \(P_i\), his own keypair \((x, P)\) and key image \(I\). Let \(0 \leq s \leq n\) be signer’s secret index in \(S\) (so that his public key is \(P_s\)). He picks a random \(\{q_i \mid i = 0, \ldots, n\}\) and \(\{w_i \mid i = 0, \ldots, n, i \neq s\}\) from \((1, \ldots, l)\) and applies the following transformations: \[L_i = \begin{cases} q_iG & \text{if } i = s \\ q_iG + w_iP_i & \text{if } i \neq s \end{cases}\] \[R_i = \begin{cases} q_iH_p(P_i) & \text{if } i = s \\ q_iH_p(P_i) + w_iI & \text{if } i \neq s \end{cases}\] The next step is getting the non-interactive challenge: \(c = H_s(m, L_1, \ldots, L_n, R_1, \ldots, R_n)\) Finally the signer computes the response: \(c_i =\) wi, if i ̸= s c − nP i=0 ci mod l, if i = s ri = ( qi, if i ̸= s qs −csx mod l, if i = s The resulting signature is \(\sigma = (I, c_1, \ldots, c_n, r_1, \ldots, r_n)\). 9 VER: takes a message \(m\), a set \(S\), a signature \(\sigma\) and outputs “true” or “false”. LNK: takes a set \(\mathcal{I} = \{I_i\}\), a signature \(\sigma\) and outputs “linked” or “indep”. The idea behind the protocol is fairly simple: a user produces a signature which can be checked by a set of public keys rather than a unique public key. The identity of the signer is indistinguishable from the other users whose public keys are in the set until the owner produces a second signature using the same keypair. Private keys \(x_0\) \(\cdots\) \(x_i\) \(\cdots\) \(x_n\) Public keys \(P_0\) \(\cdots\) \(P_i\) \(\cdots\) \(P_n\) Ring Signature sign verify Fig. 6. Ring signature anonymity. GEN: The signer picks a random secret key \(x \in [1, l - 1]\) and computes the corresponding public key \(P = xG\). Additionally he computes another public key \(I = xH_p(P)\) which we will call the “key image”. SIG: The signer generates a one-time ring signature with a non-interactive zero-knowledge proof using the techniques from [21]. He selects a random subset \(S'\) of \(n\) from the other users’ public keys \(P_i\), his own keypair \((x, P)\) and key image \(I\). Let \(0 \leq s \leq n\) be signer’s secret index in \(S\) (so that his public key is \(P_s\)). He picks a random \(\{q_i \mid i = 0, \ldots, n\}\) and \(\{w_i \mid i = 0, \ldots, n, i \neq s\}\) from \((1, \ldots, l)\) and applies the following transformations: \[L_i = \begin{cases} q_i G, & \text{if } i = s \\\\ q_i G + w_i P_i, & \text{if } i \neq s \end{cases}\] \[R_i = \begin{cases} q_i H_p(P_i), & \text{if } i = s \\\\ q_i H_p(P_i) + w_i I, & \text{if } i \neq s \end{cases}\] The next step is getting the non-interactive challenge:
\[c = H_s(m, L_1, \ldots, L_n, R_1, \ldots, R_n)\] Finally the signer computes the response: \[c_i = \begin{cases} w_i, & \text{if } i \neq s \\\\ c - \sum_{i=0}^{n} c_i \mod l, & \text{if } i = s \end{cases}\] \[r_i = \begin{cases} q_i, & \text{if } i \neq s \\ q_s - c_s x \mod l, & \text{if } i = s \end{cases}\] The resulting signature is \(\sigma = (I, c_1, \ldots, c_n, r_1, \ldots, r_n)\). 9 17 Perhaps this is stupid, but care must be taken when unioning S and P_s. If you just append the last public key to the end, unlinkability is broken because anyone checking passing transactions can just check the last public key listed in each transaction and boom. That’s the public key associated with the sender. So after unioning, a pseudorandom number generator must be used to permute the public keys chosen. "...until the owner produces a second signature using the same keypair." I wish the author(s?) would elaborate on this. I believe this means "make sure that every time you choose a set of public keys to obfuscate yourself with, you pick a completely new set with no two keys alike." Which seems like a pretty strong condition to place upon unlinkability. Perhaps "you pick a new random set from all possible keys" with the assumption that, although nontrivial intersections will inevitably happen, they won’t happen often. Either way, I need to dig deeper into this statement. This is generating the ring signature. Zero-knowledge proofs are awesome: I challenge you to prove to me that you know a secret without revealing the secret. For example, say we are at the entrance of a donut-shaped cave, and at the back of the cave (beyond sight from the entrance) is a one-way door to which you claim you have the key. If you go one direction, it always lets you through, but if you go the other direction, you need a key. But you don’t even want to SHOW me the key, let alone show me that it opens the door. But you want to prove to me that you know how to open the door. In the interactive setting, I flip a coin. Heads is left, tails is right, and you go down the donut-shaped cave whichever way the coin directs you. At the back, beyond my sight, you open the door to come back around the other side. We repeat the coin-flipping experiment until I’m satisfied that you have the key. But that’s clearly the INTERACTIVE zero-knowledge proof. There are non-interactive versions in which you and I never have to communicate; this way, no eavesdroppers can interfere. http://en.wikipedia.org/wiki/Zero-knowledge_proof This is reversed from the previous definition.
VER: takes a message \(m\), a set \(S\), a signature \(\sigma\) and outputs “true” or “false”. LNK: takes a set \(\mathcal{I} = \{I_i\}\), a signature \(\sigma\) and outputs “linked” or “indep”. The idea behind the protocol is fairly simple: a user produces a signature which can be checked by a set of public keys rather than a unique public key. The identity of the signer is indistinguishable from the other users whose public keys are in the set until the owner produces a second signature using the same keypair. Private keys \(x_0\) \(\cdots\) \(x_i\) \(\cdots\) \(x_n\) Public keys \(P_0\) \(\cdots\) \(P_i\) \(\cdots\) \(P_n\) Ring Signature sign verify Fig. 6. Ring signature anonymity. GEN: The signer picks a random secret key \(x \in [1, l - 1]\) and computes the corresponding public key \(P = xG\). Additionally he computes another public key \(I = xH_p(P)\) which we will call the “key image”. SIG: The signer generates a one-time ring signature with a non-interactive zero-knowledge proof using the techniques from [21]. He selects a random subset \(S'\) of \(n\) from the other users’ public keys \(P_i\), his own keypair \((x, P)\) and key image \(I\). Let \(0 \leq s \leq n\) be signer’s secret index in \(S\) (so that his public key is \(P_s\)). He picks a random \(\{q_i \mid i = 0, \ldots, n\}\) and \(\{w_i \mid i = 0, \ldots, n, i \neq s\}\) from \((1, \ldots, l)\) and applies the following transformations: \[L_i = \begin{cases} q_i G, & \text{if } i = s \\\\ q_i G + w_i P_i, & \text{if } i \neq s \end{cases}\] \[R_i = \begin{cases} q_i H_p(P_i), & \text{if } i = s \\\\ q_i H_p(P_i) + w_i I, & \text{if } i \neq s \end{cases}\] The next step is getting the non-interactive challenge:
\[c = H_s(m, L_1, \ldots, L_n, R_1, \ldots, R_n)\] Finally the signer computes the response: \[c_i = \begin{cases} w_i, & \text{if } i \neq s \\\\ c - \sum_{i=0}^{n} c_i \mod l, & \text{if } i = s \end{cases}\] \[r_i = \begin{cases} q_i, & \text{if } i \neq s \\ q_s - c_s x \mod l, & \text{if } i = s \end{cases}\] The resulting signature is \(\sigma = (I, c_1, \ldots, c_n, r_1, \ldots, r_n)\). 9 VER: takes a message \(m\), a set \(S\), a signature \(\sigma\) and outputs “true” or “false”. LNK: takes a set \(\mathcal{I} = \{I_i\}\), a signature \(\sigma\) and outputs “linked” or “indep”. The idea behind the protocol is fairly simple: a user produces a signature which can be checked by a set of public keys rather than a unique public key. The identity of the signer is indistinguishable from the other users whose public keys are in the set until the owner produces a second signature using the same keypair. Private keys \(x_0\) \(\cdots\) \(x_i\) \(\cdots\) \(x_n\) Public keys \(P_0\) \(\cdots\) \(P_i\) \(\cdots\) \(P_n\) Ring Signature sign verify Fig. 6. Ring signature anonymity. GEN: The signer picks a random secret key \(x \in [1, l - 1]\) and computes the corresponding public key \(P = xG\). Additionally he computes another public key \(I = xH_p(P)\) which we will call the “key image”. SIG: The signer generates a one-time ring signature with a non-interactive zero-knowledge proof using the techniques from [21]. He selects a random subset \(S'\) of \(n\) from the other users’ public keys \(P_i\), his own keypair \((x, P)\) and key image \(I\). Let \(0 \leq s \leq n\) be signer’s secret index in \(S\) (so that his public key is \(P_s\)). He picks a random \(\{q_i \mid i = 0, \ldots, n\}\) and \(\{w_i \mid i = 0, \ldots, n, i \neq s\}\) from \((1, \ldots, l)\) and applies the following transformations: \[L_i = \begin{cases} q_i G, & \text{if } i = s \\\\ q_i G + w_i P_i, & \text{if } i \neq s \end{cases}\] \[R_i = \begin{cases} q_i H_p(P_i), & \text{if } i = s \\\\ q_i H_p(P_i) + w_i I, & \text{if } i \neq s \end{cases}\] The next step is getting the non-interactive challenge:
\[c = H_s(m, L_1, \ldots, L_n, R_1, \ldots, R_n)\] Finally the signer computes the response: \[c_i = \begin{cases} w_i, & \text{if } i \neq s \\\\ c - \sum_{i=0}^{n} c_i \mod l, & \text{if } i = s \end{cases}\] \[r_i = \begin{cases} q_i, & \text{if } i \neq s \\ q_s - c_s x \mod l, & \text{if } i = s \end{cases}\] The resulting signature is \(\sigma = (I, c_1, \ldots, c_n, r_1, \ldots, r_n)\). 9 18 This whole area is cryptonote agnostic, simply describing the ring signature algorithm without reference to currencies. I suspect some of the notation is consistent with the rest of the paper, though. For example, x is the "random" secret key chosen in GEN, which gives public key P and public key image I. This value of x is the value Bob computes in part 6 page 8. So this is starting to clear up some of the confusion from the previous description. This is kind of cool; money isn’t being transferred from "Alice’s public address to Bob’s public address." It’s being transferred from one-time address to one-time address. So, in a sense, here’s how stuffis working. If Alex has some cryptonotes because someone sent them to her, this means she has the private keys needed to send them to Bob. She uses a Diffie-Hellman exchange using Bob’s public information to generate a new one-time address and the cryptonotes are transferred to that address. Now, since a (presumably secure) DH exchange was used to generate the new one-time address to which Alex sent her CN, Bob is the only one with the private keys needed to repeat the above. So now, Bob is Alex. http://en.wikipedia.org/wiki/Piecewise#Notation_and_interpretation Summation should be indexed over j not i. Each c_i is random junk (since w_i is random) except for the c_i associated with the actual key involved in this signature. The value of c is a hash of the previous information. I think this may contain a typo worse than re-using the index ’i,’ though, because c_s seems to be implicitly, not explicitly, defined. Indeed, if we take this equation on faith, then we determine that c_s = (1/2)c - (1/2) sum_i neq s c_i. That is, a hash minus a whole bunch of random numbers. On the other hand, if this summation is intended to be read "c_s = (c - sum_j neq s c_j) mod l", then we take the hash of our previous information, generate a bunch of random numbers, subtract all of those random numbers offthe hash, and that gives us c_s. This seems to be what "should" be happening given my intuition, and matches the verification step on page 10. But intuition is not mathematics. I’ll dig deeper into this. Same as before; all of these will be random junk except for the one associated with the actual signer’s public key x. Except this time, this is more what I would expect from the structure: r_i is random for i!=s and r_s is determined only by the secret x and the s-indexed values of q_i and c_i.
VER: The verifier checks the signature by applying the inverse transformations:
\[L'_i = r_i G + c_i P_i\]
\[R'_i = r_i H_p(P_i) + c_i I\] Finally, the verifier checks if
\[\sum_{i=0}^{n} c_i \stackrel{?}{=} H_s(m, L'_0, \ldots, L'_n, R'_0, \ldots, R'_n) \mod l\] If this equality is correct, the verifier runs the algorithm LNK. Otherwise the verifier rejects the signature. LNK: The verifier checks if \(I\) has been used in past signatures (these values are stored in the set \(\mathcal{I}\)). Multiple uses imply that two signatures were produced under the same secret key. The meaning of the protocol: by applying L-transformations the signer proves that he knows such \(x\) that at least one \(P_i = xG\). To make this proof non-repeatable we introduce the key image as \(I = xH_p(P)\). The signer uses the same coefficients \((r_i, c_i)\) to prove almost the same statement: he knows such \(x\) that at least one \(H_p(P_i) = I \cdot x^{-1}\). If the mapping \(x \to I\) is an injection: 1. Nobody can recover the public key from the key image and identify the signer; 2. The signer cannot make two signatures with different \(I\)'s and the same \(x\). A full security analysis is provided in Appendix A. 4.5 Standard CryptoNote transaction By combining both methods (unlinkable public keys and untraceable ring signature) Bob achieves new level of privacy in comparison with the original Bitcoin scheme. It requires him to store only one private key \((a, b)\) and publish \((A, B)\) to start receiving and sending anonymous transactions. While validating each transaction Bob additionally performs only two elliptic curve multiplications and one addition per output to check if a transaction belongs to him. For his every output Bob recovers a one-time keypair \((p_i, P_i)\) and stores it in his wallet. Any inputs can be circumstantially proved to have the same owner only if they appear in a single transaction. In fact this relationship is much harder to establish due to the one-time ring signature. With a ring signature Bob can effectively hide every input among somebody else’s; all possible spenders will be equiprobable, even the previous owner (Alice) has no more information than any observer. When signing his transaction Bob specifies \(n\) foreign outputs with the same amount as his output, mixing all of them without the participation of other users. Bob himself (as well as anybody else) does not know if any of these payments have been spent: an output can be used in thousands of signatures as an ambiguity factor and never as a target of hiding. The double spend check occurs in the LNK phase when checking against the used key images set. Bob can choose the ambiguity degree on his own: \(n = 1\) means that the probability he has spent the output is 50% probability, \(n = 99\) gives 1%. The size of the resulting signature increases linearly as \(O(n+1)\), so the improved anonymity costs to Bob extra transaction fees. He also can set \(n = 0\) and make his ring signature to consist of only one element, however this will instantly reveal him as a spender. 10 VER: The verifier checks the signature by applying the inverse transformations:
\[L'_i = r_i G + c_i P_i\]
\[R'_i = r_i H_p(P_i) + c_i I\] Finally, the verifier checks if
\[\sum_{i=0}^{n} c_i \stackrel{?}{=} H_s(m, L'_0, \ldots, L'_n, R'_0, \ldots, R'_n) \mod l\] If this equality is correct, the verifier runs the algorithm LNK. Otherwise the verifier rejects the signature. LNK: The verifier checks if \(I\) has been used in past signatures (these values are stored in the set \(\mathcal{I}\)). Multiple uses imply that two signatures were produced under the same secret key. The meaning of the protocol: by applying L-transformations the signer proves that he knows such \(x\) that at least one \(P_i = xG\). To make this proof non-repeatable we introduce the key image as \(I = xH_p(P)\). The signer uses the same coefficients \((r_i, c_i)\) to prove almost the same statement: he knows such \(x\) that at least one \(H_p(P_i) = I \cdot x^{-1}\). If the mapping \(x \to I\) is an injection: 1. Nobody can recover the public key from the key image and identify the signer; 2. The signer cannot make two signatures with different \(I\)'s and the same \(x\). A full security analysis is provided in Appendix A. 4.5 Standard CryptoNote transaction By combining both methods (unlinkable public keys and untraceable ring signature) Bob achieves new level of privacy in comparison with the original Bitcoin scheme. It requires him to store only one private key \((a, b)\) and publish \((A, B)\) to start receiving and sending anonymous transactions. While validating each transaction Bob additionally performs only two elliptic curve multiplications and one addition per output to check if a transaction belongs to him. For his every output Bob recovers a one-time keypair \((p_i, P_i)\) and stores it in his wallet. Any inputs can be circumstantially proved to have the same owner only if they appear in a single transaction. In fact this relationship is much harder to establish due to the one-time ring signature. With a ring signature Bob can effectively hide every input among somebody else’s; all possible spenders will be equiprobable, even the previous owner (Alice) has no more information than any observer. When signing his transaction Bob specifies \(n\) foreign outputs with the same amount as his output, mixing all of them without the participation of other users. Bob himself (as well as anybody else) does not know if any of these payments have been spent: an output can be used in thousands of signatures as an ambiguity factor and never as a target of hiding. The double spend check occurs in the LNK phase when checking against the used key images set. Bob can choose the ambiguity degree on his own: \(n = 1\) means that the probability he has spent the output is 50% probability, \(n = 99\) gives 1%. The size of the resulting signature increases linearly as \(O(n+1)\), so the improved anonymity costs to Bob extra transaction fees. He also can set \(n = 0\) and make his ring signature to consist of only one element, however this will instantly reveal him as a spender. 10 19 At this point, I’m terribly confused. Alex receives a message M with signature (I,c_1, ..., c_n, r_1, ..., r_n) and list of public keys S. and she runs VER. This will compute L_i’ and R_i’ This verifies that c_s = c - sum_i neq s c_i on the previous page. At first I was VERy (ha) confused. Anyone can compute L_i’ and R_i’. Indeed, each r_i and c_i have been published in the signature sigma together with the value for I. The set S = P_i of all public keys has also been published. So anyone who has seen sigma and the set of keys S = P_i will get the same values for L_i’ and R_i’ and hence check the signature. But then I remembered this section is simply describing a signature algorithm, not a "check if signed, check if SENT TO ME, and if so, then go spend the money." This is SIMPLY the signature part of the game. I’m interested to read Appendix A when I finally get there. I would like to see a full-scale operation-by-operation comparison of Cryptonote to Bitcoin. Also, electricity/sustainability. What pieces of the algorithms constitute "input" here? Transaction input, I believe, is an Amount and a set of UTXOs that sum to a greater amount than the Amount. This is unclear. "Target of hiding?" I have thought about this for a few minutes now and I still haven’t the foggiest idea of what it could mean. A double-spend attack can be executed only by manipulating a node’s perceived used-key images set \(I\). "Ambiguity degree" = n but the total number of public keys included in the transaction is n+1. That is to say, ambiguity degree would be "how many OTHER people do you want in the crowd?" The answer will probably be, by default "as many as possible."
VER: The verifier checks the signature by applying the inverse transformations:
\[L'_i = r_i G + c_i P_i\]
\[R'_i = r_i H_p(P_i) + c_i I\] Finally, the verifier checks if
\[\sum_{i=0}^{n} c_i \stackrel{?}{=} H_s(m, L'_0, \ldots, L'_n, R'_0, \ldots, R'_n) \mod l\] If this equality is correct, the verifier runs the algorithm LNK. Otherwise the verifier rejects the signature. LNK: The verifier checks if \(I\) has been used in past signatures (these values are stored in the set \(\mathcal{I}\)). Multiple uses imply that two signatures were produced under the same secret key. The meaning of the protocol: by applying L-transformations the signer proves that he knows such \(x\) that at least one \(P_i = xG\). To make this proof non-repeatable we introduce the key image as \(I = xH_p(P)\). The signer uses the same coefficients \((r_i, c_i)\) to prove almost the same statement: he knows such \(x\) that at least one \(H_p(P_i) = I \cdot x^{-1}\). If the mapping \(x \to I\) is an injection: 1. Nobody can recover the public key from the key image and identify the signer; 2. The signer cannot make two signatures with different \(I\)'s and the same \(x\). A full security analysis is provided in Appendix A. 4.5 Standard CryptoNote transaction By combining both methods (unlinkable public keys and untraceable ring signature) Bob achieves new level of privacy in comparison with the original Bitcoin scheme. It requires him to store only one private key \((a, b)\) and publish \((A, B)\) to start receiving and sending anonymous transactions. While validating each transaction Bob additionally performs only two elliptic curve multiplications and one addition per output to check if a transaction belongs to him. For his every output Bob recovers a one-time keypair \((p_i, P_i)\) and stores it in his wallet. Any inputs can be circumstantially proved to have the same owner only if they appear in a single transaction. In fact this relationship is much harder to establish due to the one-time ring signature. With a ring signature Bob can effectively hide every input among somebody else’s; all possible spenders will be equiprobable, even the previous owner (Alice) has no more information than any observer. When signing his transaction Bob specifies \(n\) foreign outputs with the same amount as his output, mixing all of them without the participation of other users. Bob himself (as well as anybody else) does not know if any of these payments have been spent: an output can be used in thousands of signatures as an ambiguity factor and never as a target of hiding. The double spend check occurs in the LNK phase when checking against the used key images set. Bob can choose the ambiguity degree on his own: \(n = 1\) means that the probability he has spent the output is 50% probability, \(n = 99\) gives 1%. The size of the resulting signature increases linearly as \(O(n+1)\), so the improved anonymity costs to Bob extra transaction fees. He also can set \(n = 0\) and make his ring signature to consist of only one element, however this will instantly reveal him as a spender. 10 VER: The verifier checks the signature by applying the inverse transformations:
\[L'_i = r_i G + c_i P_i\]
\[R'_i = r_i H_p(P_i) + c_i I\] Finally, the verifier checks if
\[\sum_{i=0}^{n} c_i \stackrel{?}{=} H_s(m, L'_0, \ldots, L'_n, R'_0, \ldots, R'_n) \mod l\] If this equality is correct, the verifier runs the algorithm LNK. Otherwise the verifier rejects the signature. LNK: The verifier checks if \(I\) has been used in past signatures (these values are stored in the set \(\mathcal{I}\)). Multiple uses imply that two signatures were produced under the same secret key. The meaning of the protocol: by applying L-transformations the signer proves that he knows such \(x\) that at least one \(P_i = xG\). To make this proof non-repeatable we introduce the key image as \(I = xH_p(P)\). The signer uses the same coefficients \((r_i, c_i)\) to prove almost the same statement: he knows such \(x\) that at least one \(H_p(P_i) = I \cdot x^{-1}\). If the mapping \(x \to I\) is an injection: 1. Nobody can recover the public key from the key image and identify the signer; 2. The signer cannot make two signatures with different \(I\)'s and the same \(x\). A full security analysis is provided in Appendix A. 4.5 Standard CryptoNote transaction By combining both methods (unlinkable public keys and untraceable ring signature) Bob achieves new level of privacy in comparison with the original Bitcoin scheme. It requires him to store only one private key \((a, b)\) and publish \((A, B)\) to start receiving and sending anonymous transactions. While validating each transaction Bob additionally performs only two elliptic curve multiplications and one addition per output to check if a transaction belongs to him. For his every output Bob recovers a one-time keypair \((p_i, P_i)\) and stores it in his wallet. Any inputs can be circumstantially proved to have the same owner only if they appear in a single transaction. In fact this relationship is much harder to establish due to the one-time ring signature. With a ring signature Bob can effectively hide every input among somebody else’s; all possible spenders will be equiprobable, even the previous owner (Alice) has no more information than any observer. When signing his transaction Bob specifies \(n\) foreign outputs with the same amount as his output, mixing all of them without the participation of other users. Bob himself (as well as anybody else) does not know if any of these payments have been spent: an output can be used in thousands of signatures as an ambiguity factor and never as a target of hiding. The double spend check occurs in the LNK phase when checking against the used key images set. Bob can choose the ambiguity degree on his own: \(n = 1\) means that the probability he has spent the output is 50% probability, \(n = 99\) gives 1%. The size of the resulting signature increases linearly as \(O(n+1)\), so the improved anonymity costs to Bob extra transaction fees. He also can set \(n = 0\) and make his ring signature to consist of only one element, however this will instantly reveal him as a spender. 10 20 This is interesting; earlier, we provided a way for a receiver, Bob, to make all INCOMING transactions non-unlinkable either by choosing half of his private keys deterministically or by publishing half his private keys as public. This is a no-going-back sort of policy. Here, we see a way of a sender, Alex, to choose a single outgoing transaction as linkable, but in fact this reveals Alex as the sender to the whole network. This is NOT a no-going-back sort of policy. This is transaction-by-transaction. Is there a third policy? Can a receiver, Bob, generate a unique payment ID for Alex that never changes, perhaps using a Diffie-Hellman exchange? If anyone includes that payment ID bundled somewhere in her transaction to Bob’s address, it must have come from Alex. This way, Alex need not reveal herself to the whole network by choosing to link a particular transaction, but she can still identify herself to the person to whom she sends her money. Isn’t this what Poloniex does?
Transaction Tx input \(\text{Output}_0\) \(\ldots\) \(\text{Output}_i\) \(\ldots\) \(\text{Output}_n\) Key image Signatures Ring Signature Destination key Output1 Destination key Outputn Foreign transactions Sender’s output Destination key One-time keypair One-time private key \(I = xH_p(P)\) \(P\), \(x\) Fig. 7. Ring signature generation in a standard transaction. 5 Egalitarian Proof-of-work In this section we propose and ground the new proof-of-work algorithm. Our primary goal is to close the gap between CPU (majority) and GPU/FPGA/ASIC (minority) miners. It is appropriate that some users can have a certain advantage over others, but their investments should grow at least linearly with the power. More generally, producing special-purpose devices has to be as less profitable as possible. 5.1 Related works The original Bitcoin proof-of-work protocol uses the CPU-intensive pricing function SHA-256. It mainly consists of basic logical operators and relies solely on the computational speed of processor, therefore is perfectly suitable for multicore/conveyer implementation. However, modern computers are not limited by the number of operations per second alone, but also by memory size. While some processors can be substantially faster than others [8], memory sizes are less likely to vary between machines. Memory-bound price functions were first introduced by Abadi et al and were defined as “functions whose computation time is dominated by the time spent accessing memory” [15]. The main idea is to construct an algorithm allocating a large block of data (“scratchpad”) within memory that can be accessed relatively slowly (for example, RAM) and “accessing an unpredictable sequence of locations” within it. A block should be large enough to make preserving the data more advantageous than recomputing it for each access. The algorithm also should prevent internal parallelism, hence \(N\) simultaneous threads should require \(N\) times more memory at once. Dwork et al [22] investigated and formalized this approach leading them to suggest another variant of the pricing function: “Mbound”. One more work belongs to F. Coelho [20], who 11 Transaction Tx input \(\text{Output}_0\) \(\ldots\) \(\text{Output}_i\) \(\ldots\) \(\text{Output}_n\) Key image Signatures Ring Signature Destination key Output1 Destination key Outputn Foreign transactions Sender’s output Destination key One-time keypair One-time private key \(I = xH_p(P)\) \(P\), \(x\) Fig. 7. Ring signature generation in a standard transaction. 5 Egalitarian Proof-of-work In this section we propose and ground the new proof-of-work algorithm. Our primary goal is to close the gap between CPU (majority) and GPU/FPGA/ASIC (minority) miners. It is appropriate that some users can have a certain advantage over others, but their investments should grow at least linearly with the power. More generally, producing special-purpose devices has to be as less profitable as possible. 5.1 Related works The original Bitcoin proof-of-work protocol uses the CPU-intensive pricing function SHA-256. It mainly consists of basic logical operators and relies solely on the computational speed of processor, therefore is perfectly suitable for multicore/conveyer implementation. However, modern computers are not limited by the number of operations per second alone, but also by memory size. While some processors can be substantially faster than others [8], memory sizes are less likely to vary between machines. Memory-bound price functions were first introduced by Abadi et al and were defined as “functions whose computation time is dominated by the time spent accessing memory” [15]. The main idea is to construct an algorithm allocating a large block of data (“scratchpad”) within memory that can be accessed relatively slowly (for example, RAM) and “accessing an unpredictable sequence of locations” within it. A block should be large enough to make preserving the data more advantageous than recomputing it for each access. The algorithm also should prevent internal parallelism, hence \(N\) simultaneous threads should require \(N\) times more memory at once. Dwork et al [22] investigated and formalized this approach leading them to suggest another variant of the pricing function: "Mbound". One more work belongs to F. Coelho [20], who 11 21 These are, ostensibly, our UTXO’s: amounts and destination keys. If Alex is the one constructing this standard transaction and is sending to Bob, then Alex also has the private keys to each of these. I like this diagram a whole lot, because it answers some earlier questions. A Txn input consists of a set of Txn outputs and a key image. It is then signed with a ring signature, including all of the private keys Alex owns to all of the foreign transactions wrapped up in the deal. The Txn output consists of an amount and a destination key. The receiver of the transaction may, at will, generate their one-time private key as described earlier in the paper in order to spend the money. It will be delightful to find out how much this matches the actual code... No, Nic van Saberhagen describes loosely some properties of a proof of work algorithm, without actually describing that algorithm. The CryptoNight algorithm itself will REQUIRE a deep analysis. When I read this, I stuttered. Should investment grow at least linearly with power, or should investment grow at most linearly with power? And then I realized; I, as a miner, or an investor, usually think of "how much power can I get for an investment?" not "how much investment is required for a fixed amount of power?" Of course, denote investment by \(I\) and power by \(P\). If \(I(P)\) is investment as a function of power and \(P(I)\) is power as a function of investment, they'll be inverses of each other (wherever inverses can exist). And if \(I(P)\) is faster-than-linear than \(P(I)\) is slower-than-linear. Hence, there will be a reduced rate of returns for investors. That is to say, what the author is saying here is: "sure, as you invest more, you’ll get more power. But we should try to make that a reduced rate of returns thing." CPU investments will cap out sub-linearly, eventually; the question is whether the authors have designed a POW algorithm that will force the ASICs to also do this. Should a hypothetical "future currency" always mine with the slowest/most limited resources? The paper by Abadi et al, (which has some Google and Microsoft engineers as authors) is, essentially, using the fact that for the past few years memory size has had a much smaller variance across machines than processor speed, and with a more-than-linear investment-forpower ratio. In a few years, this may have to be re-assessed! Everything is an arms race... Constructing a hash function is difficult; constructing a hash function satisfying these constraints seems to be more difficult. This paper seems to have no explanation of the actual hashing algorithm CryptoNight. I think it’s a memory-hard implementation of SHA-3, based on forum posts but I have no idea... and that’s the point. It must be explained.
proposed the most effective solution: “Hokkaido”. To our knowledge the last work based on the idea of pseudo-random searches in a big array is the algorithm known as “scrypt” by C. Percival [32]. Unlike the previous functions it focuses on key derivation, and not proof-of-work systems. Despite this fact scrypt can serve our purpose: it works well as a pricing function in the partial hash conversion problem such as SHA-256 in Bitcoin. By now scrypt has already been applied in Litecoin [14] and some other Bitcoin forks. However, its implementation is not really memory-bound: the ratio “memory access time / overall time” is not large enough because each instance uses only 128 KB. This permits GPU miners to be roughly 10 times more effective and continues to leave the possibility of creating relatively cheap but highly-efficient mining devices. Moreover, the scrypt construction itself allows a linear trade-offbetween memory size and CPU speed due to the fact that every block in the scratchpad is derived only from the previous. For example, you can store every second block and recalculate the others in a lazy way, i.e. only when it becomes necessary. The pseudo-random indexes are assumed to be uniformly distributed, hence the expected value of the additional blocks' recalculations is \(\frac{1}{2} \cdot N\), where \(N\) is the number of iterations. The overall computation time increases less than by half because there are also time independent (constant time) operations such as preparing the scratchpad and hashing on every iteration. Saving 2/3 of the memory costs \(\frac{1}{3} \cdot N + \frac{1}{3} \cdot 2 \cdot N = N\) additional recalculations; 9/10 results in \(\frac{1}{10} \cdot N + \ldots + \frac{1}{10} \cdot 9 \cdot N = 4.5N\). It is easy to show that storing only \(\frac{1}{s}\) of all blocks increases the time less than by a factor of \(\frac{s-1}{2}\). This in turn implies that a machine with a CPU 200 times faster than the modern chips can store only 320 bytes of the scratchpad. 5.2 The proposed algorithm We propose a new memory-bound algorithm for the proof-of-work pricing function. It relies on random access to a slow memory and emphasizes latency dependence. As opposed to scrypt every new block (64 bytes in length) depends on all the previous blocks. As a result a hypothetical "memory-saver" should increase his calculation speed exponentially. Our algorithm requires about 2 Mb per instance for the following reasons: 1. It fits in the L3 cache (per core) of modern processors, which should become mainstream in a few years; 2. A megabyte of internal memory is an almost unacceptable size for a modern ASIC pipeline; 3. GPUs may run hundreds of concurrent instances, but they are limited in other ways: GDDR5 memory is slower than the CPU L3 cache and remarkable for its bandwidth, not random access speed. 4. Significant expansion of the scratchpad would require an increase in iterations, which in turn implies an overall time increase. "Heavy" calls in a trust-less p2p network may lead to serious vulnerabilities, because nodes are obliged to check every new block's proof-of-work. If a node spends a considerable amount of time on each hash evaluation, it can be easily DDoSed by a flood of fake objects with arbitrary work data (nonce values). 12 proposed the most effective solution: "Hokkaido". To our knowledge the last work based on the idea of pseudo-random searches in a big array is the algorithm known as “scrypt” by C. Percival [32]. Unlike the previous functions it focuses on key derivation, and not proof-of-work systems. Despite this fact scrypt can serve our purpose: it works well as a pricing function in the partial hash conversion problem such as SHA-256 in Bitcoin. By now scrypt has already been applied in Litecoin [14] and some other Bitcoin forks. However, its implementation is not really memory-bound: the ratio “memory access time / overall time” is not large enough because each instance uses only 128 KB. This permits GPU miners to be roughly 10 times more effective and continues to leave the possibility of creating relatively cheap but highly-efficient mining devices. Moreover, the scrypt construction itself allows a linear trade-offbetween memory size and CPU speed due to the fact that every block in the scratchpad is derived only from the previous. For example, you can store every second block and recalculate the others in a lazy way, i.e. only when it becomes necessary. The pseudo-random indexes are assumed to be uniformly distributed, hence the expected value of the additional blocks’ recalculations is \(\frac{1}{2} \cdot N\), where \(N\) is the number of iterations. The overall computation time increases less than by half because there are also time independent (constant time) operations such as preparing the scratchpad and hashing on every iteration. Saving 2/3 of the memory costs \(\frac{1}{3} \cdot N + \frac{1}{3} \cdot 2 \cdot N = N\) additional recalculations; 9/10 results in \(\frac{1}{10} \cdot N + \ldots + \frac{1}{10} \cdot 9 \cdot N = 4.5N\). It is easy to show that storing only \(\frac{1}{s}\) of all blocks increases the time less than by a factor of \(\frac{s-1}{2}\). This in turn implies that a machine with a CPU 200 times faster than the modern chips can store only 320 bytes of the scratchpad. 5.2 The proposed algorithm We propose a new memory-bound algorithm for the proof-of-work pricing function. It relies on random access to a slow memory and emphasizes latency dependence. As opposed to scrypt every new block (64 bytes in length) depends on all the previous blocks. As a result a hypothetical “memory-saver” should increase his calculation speed exponentially. Our algorithm requires about 2 Mb per instance for the following reasons: 1. It fits in the L3 cache (per core) of modern processors, which should become mainstream in a few years; 2. A megabyte of internal memory is an almost unacceptable size for a modern ASIC pipeline; 3. GPUs may run hundreds of concurrent instances, but they are limited in other ways: GDDR5 memory is slower than the CPU L3 cache and remarkable for its bandwidth, not random access speed. 4. Significant expansion of the scratchpad would require an increase in iterations, which in turn implies an overall time increase. “Heavy” calls in a trust-less p2p network may lead to serious vulnerabilities, because nodes are obliged to check every new block’s proof-of-work. If a node spends a considerable amount of time on each hash evaluation, it can be easily DDoSed by a flood of fake objects with arbitrary work data (nonce values). 12 22 Nevermind, it’s a scrypt coin? Where is the algorithm? All I see is an advertisement. This is where Cryptonote, if their PoW algorithm is worthwhile, will really shine. It’s not really SHA-256, it’s not really scrypt. It’s new, memory bound, and non-recursive.
6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 23 Atomic units. I like that. Is this the equivalent of Satoshis? If so, then that means there are going to be 185 billion cryptonote. I know this must be, eventually, tweaked in a few pages, or maybe there’s a typo? If the base reward is "all remaining coins" then only one block is sufficient to get all coins. Instamine. On the other hand, if this is supposed to be proportional in some way to the difference in time between now and some coin-production-termination-date? That would make sense. Also, in my world, two greater than signs like this means "much greater than." Did the author possibly mean something else? If adjustment to difficulty occurs every block then an attacker could have a very large farm of machines mine on and offin carefully chosen time intervals. This could cause a chaotic explosion (or crash to zero) in difficulty, if difficulty adjustment formulas aren’t suitably damped. No doubt that Bitcoin’s method is unsuitable for rapid recalculations, but the idea of inertia in these systems would need to be proven, not taken for granted. Furthermore, oscillations in network difficulty isn’t necessarily a problem unless it results in oscillations of ostensible supply of coins - and having a very rapidly changing difficulty could cause "over-correction." Time spent, especially over a short time span like a few minutes, will be proportional to "total number of blocks created on the network." The constant of proportionality will, itself, grow over time, presumably exponentially if CN takes off. It may be a better idea to simply adjust the difficulty to keep "total blocks created on the network since the last block was added to the main chain" within some constant value, or with bounded variation or something like that. If an adaptive algorithm that is computationally easy to implement can be determined, this would seem to solve the problem. But then, if we used that method, someone with a big mining farm could shut their farm down for a few hours, and switch it back on again. For the first few blocks, that farm will make bank. So, actually, this method would bring up an interesting point: mining becomes (on average) a losing game with no ROI, especially as more folks hop on the network. If the mining difficulty very closely tracked network hashrate, I somehow doubt people would mine as much as they currently do. Or, on the other hand, instead of keeping their mining farms going 24/7, they may turn them on for 6 hours, offfor 2, on for 6, offfor 2, or something like that. Just switch to another coin for a few hours, wait for difficulty to drop, then hop back on in order to gain those few extra blocks of profitability as the network adapts. And you know what? This is actually probably one of the better mining scenarios I’ve put my mind into... This could be circular, but if block creation time averages to about a minute, can we just use the number of blocks as a proxy for "time spent?"
6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 24 Okay, so we have a blockchain, and each block has timestamps IN ADDITION to simply being ordered. This was clearly inserted simply for difficulty adjustment, because timestamps are very unreliable, as mentioned. Are we allowed to have contradicting timestamps in the chain? If Block A comes before Block B in the chain, and everything is consistent in terms of finances, but Block A appears to have been created after Block B? Because, perhaps, someone owned a large part of the network? Is that ok? Probably, because the finances aren’t goofed up. Okay, so I hate this arbitrary "only 80% of the blocks are legitimate for the main blockchain" approach. It was intended to prevent liars from tweaking their timestamps? But now, it adds incentive for everyone to lie about their timestamps and just pick the median. Please define. Meaning "for this block, only include transactions that include fees greater than p%, preferentially with fees greater than 2p%" or something like that? What do they mean by bogus? If the transaction is consistent with past history of the blockchain, and the transaction includes fees that satisfy miners, is that not enough? Well, no, not necessarily. If no maximum block size exists, there is nothing to keep a malicious user from simply uploading a massive block of transactions to himself all at once just to slow down the network. A core rule for maximum block size prevents people from putting enormous amounts of junk data on the blockchain all at once just to slow things down. But such a rule certianly has to be adaptive - during the christmas season, for example, we could expect traffic to spike, and block size to get very big, and immediately afterward, for the block size to subsequently drop again. So we need either a) some sort of adaptive cap or b) a cap large enough so that 99% of reasonable christmas peaks don’t break the cap. Of course, that second one is impossible to estimate - who knows if a currency will catch on? Better to make it adaptive and not worry about it. But then we have a control theory problem: how to make this adaptive without vulnerability to attack or wild & crazy oscillations? Notice an adaptive method doesn’t stop malicious users from accumulating small amounts of junk data over time on the blockchain to cause long-term bloat. This is a different issue altogether and one that cryptonote coins have serious problems with.
6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 6 Further advantages 6.1 Smooth emission The upper bound for the overall amount of CryptoNote digital coins is: \(M_{Supply} = 2^{64} - 1\) atomic units. This is a natural restriction based only on implementation limits, not on intuition such as “N coins ought to be enough for anybody”. To ensure the smoothness of the emission process we use the following formula for block rewards: \(BaseReward = (M_{Supply} - A) \gg 18\), where \(A\) is amount of previously generated coins. 6.2 Adjustable parameters 6.2.1 Difficulty CryptoNote contains a targeting algorithm which changes the difficulty of every block. This decreases the system’s reaction time when the network hashrate is intensely growing or shrinking, preserving a constant block rate. The original Bitcoin method calculates the relation of actual and target time-span between the last 2016 blocks and uses it as the multiplier for the current difficulty. Obviously this is unsuitable for rapid recalculations (because of large inertia) and results in oscillations. The general idea behind our algorithm is to sum all the work completed by the nodes and divide it by the time they have spent. The measure of work is the corresponding difficulty values in each block. But due to inaccurate and untrusted timestamps we cannot determine the exact time interval between blocks. A user can shift his timestamp into the future and the next time intervals might be improbably small or even negative. Presumably there will be few incidents of this kind, so we can just sort the timestamps and cut-offthe outliers (i.e. 20%). The range of the rest values is the time which was spent for 80% of the corresponding blocks. 6.2.2 Size limits Users pay for storing the blockchain and shall be entitled to vote for its size. Every miner deals with the trade-offbetween balancing the costs and profit from the fees and sets his own “soft-limit” for creating blocks. Also the core rule for the maximum block size is necessary for preventing the blockchain from being flooded with bogus transaction, however this value should not be hard-coded. Let \(M_N\) be the median value of the last \(N\) blocks sizes. Then the “hard-limit” for the size of accepting blocks is \(2 \cdot M_N\). It averts the blockchain from bloating but still allows the limit to slowly grow with time if necessary. Transaction size does not need to be limited explicitly. It is bounded by the size of a block; and if somebody wants to create a huge transaction with hundreds of inputs/outputs (or with the high ambiguity degree in ring signatures), he can do so by paying sufficient fee. 6.2.3 Excess size penalty A miner still has the ability to stuffa block full of his own zero-fee transactions up to its maximum size \(2 \cdot M_b\). Even though only the majority of miners can shift the median value, there is still a 13 25 Rescaling time so that one unit of time is \(N\) blocks, the average block size could still, theoretically, grow exponentially proportionally to \(2^t\). On the other hand, a more general cap on the next block would be \(M_n \cdot f(M_n)\) for some function \(f\). What properties of \(f\) would we choose in order to guarantee some "reasonable growth" of block size? The progression of block sizes (after rescaling time) would go like this: \(M_n \quad f(M_n) \cdot M_n \quad f(f(M_n) \cdot M_n) \cdot f(M_n) \cdot M_n \quad f(f(f(M_n) \cdot M_n) \cdot f(M_n) \cdot M_n) \cdot f(f(M_n) \cdot M_n) \cdot f(\ldots)\) \(\ldots\) And the goal here is to choose \(f\) such that this sequence grows no faster than, say, linearly, or perhaps even as \(\log(t)\). Of course, if \(f(M_n) = a\) for some constant \(a\), this sequence is actually \(M_n \quad a \cdot M_n \quad a^2 \cdot M_n \quad a^3 \cdot M_n \quad \ldots\) And, of course, the only way this can be limited to at-most linear growth is by choosing \(a = 1\). This is, of course, infeasible. It does not allow growth at all. If, on the other hand, \(f(M_n)\) is a non-constant function, then the situation is much more complicated and may allow for an elegant solution. I’ll think on this for awhile. This fee will have to be large enough to discount the excess size penalty from the next section. Why is a general user assumed male, huh? Huh?
possibility to bloat the blockchain and produce an additional load on the nodes. To discourage malevolent participants from creating large blocks we introduce a penalty function: \[NewReward = BaseReward \cdot \left(\frac{BlkSize}{M_N} - 1\right)^2\] This rule is applied only when \(BlkSize\) is greater than minimal free block size which should be close to \(\max(10kb, M_N \cdot 110\%)\). Miners are permitted to create blocks of “usual size” and even exceed it with profit when the overall fees surpass the penalty. But fees are unlikely to grow quadratically unlike the penalty value so there will be an equilibrium. 6.3 Transaction scripts CryptoNote has a very minimalistic scripting subsystem. A sender specifies an expression \(\Phi = f(x_1, x_2, \ldots, x_n)\), where \(n\) is the number of destination public keys \(\{P_i\}_{i=1}^{n}\). Only five binary operators are supported: min, max, sum, mul and cmp. When the receiver spends this payment, he produces \(0 \leq k \leq n\) signatures and passes them to transaction input. The verification process simply evaluates \(\Phi\) with \(x_i = 1\) to check for a valid signature for the public key \(P_i\), and \(x_i = 0\). A verifier accepts the proof iff \(\Phi > 0\). Despite its simplicity this approach covers every possible case: • Multi-/Threshold signature. For the Bitcoin-style “M-out-of-N” multi-signature (i.e. the receiver should provide at least \(0 \leq M \leq N\) valid signatures) \(\Phi = x_1 + x_2 + \ldots + x_N \geq M\) (for clarity we are using common algebraic notation). The weighted threshold signature (some keys can be more important than other) could be expressed as \(\Phi = w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_N \cdot x_N \geq w_M\). And scenario where the master-key corresponds to \(\Phi = \max(M \cdot x, x_1 + x_2 + \ldots + x_N) \geq M\). It is easy to show that any sophisticated case can be expressed with these operators, i.e. they form basis. • Password protection. Possession of a secret password \(s\) is equivalent to the knowledge of a private key, deterministically derived from the password: \(k = KDF(s)\). Hence, a receiver can prove that he knows the password by providing another signature under the key \(k\). The sender simply adds the corresponding public key to his own output. Note that this method is much more secure than the “transaction puzzle” used in Bitcoin [13], where the password is explicitly passed in the inputs. • Degenerate cases. \(\Phi = 1\) means that anybody can spend the money; \(\Phi = 0\) marks the output as not spendable forever. In the case when the output script combined with public keys is too large for a sender, he can use special output type, which indicates that the recipient will put this data in his input while the sender provides only a hash of it. This approach is similar to Bitcoin’s “pay-to-hash” feature, but instead of adding new script commands we handle this case at the data structure level. 7 Conclusion We have investigated the major flaws in Bitcoin and proposed some possible solutions. These advantageous features and our ongoing development make new electronic cash system CryptoNote a serious rival to Bitcoin, outclassing all its forks. 14 possibility to bloat the blockchain and produce an additional load on the nodes. To discourage malevolent participants from creating large blocks we introduce a penalty function: \[NewReward = BaseReward \cdot \left(\frac{BlkSize}{M_N} - 1\right)^2\] This rule is applied only when \(BlkSize\) is greater than minimal free block size which should be close to \(\max(10kb, M_N \cdot 110\%)\). Miners are permitted to create blocks of “usual size” and even exceed it with profit when the overall fees surpass the penalty. But fees are unlikely to grow quadratically unlike the penalty value so there will be an equilibrium. 6.3 Transaction scripts CryptoNote has a very minimalistic scripting subsystem. A sender specifies an expression \(\Phi = f(x_1, x_2, \ldots, x_n)\), where \(n\) is the number of destination public keys \(\{P_i\}_{i=1}^{n}\). Only five binary operators are supported: min, max, sum, mul and cmp. When the receiver spends this payment, he produces \(0 \leq k \leq n\) signatures and passes them to transaction input. The verification process simply evaluates \(\Phi\) with \(x_i = 1\) to check for a valid signature for the public key \(P_i\), and \(x_i = 0\). A verifier accepts the proof iff \(\Phi > 0\). Despite its simplicity this approach covers every possible case: • Multi-/Threshold signature. For the Bitcoin-style “M-out-of-N” multi-signature (i.e. the receiver should provide at least \(0 \leq M \leq N\) valid signatures) \(\Phi = x_1 + x_2 + \ldots + x_N \geq M\) (for clarity we are using common algebraic notation). The weighted threshold signature (some keys can be more important than other) could be expressed as \(\Phi = w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_N \cdot x_N \geq w_M\). And scenario where the master-key corresponds to \(\Phi = \max(M \cdot x, x_1 + x_2 + \ldots + x_N) \geq M\). It is easy to show that any sophisticated case can be expressed with these operators, i.e. they form basis. • Password protection. Possession of a secret password \(s\) is equivalent to the knowledge of a private key, deterministically derived from the password: \(k = KDF(s)\). Hence, a receiver can prove that he knows the password by providing another signature under the key \(k\). The sender simply adds the corresponding public key to his own output. Note that this method is much more secure than the “transaction puzzle” used in Bitcoin [13], where the password is explicitly passed in the inputs. • Degenerate cases. \(\Phi = 1\) means that anybody can spend the money; \(\Phi = 0\) marks the output as not spendable forever. In the case when the output script combined with public keys is too large for a sender, he can use special output type, which indicates that the recipient will put this data in his input while the sender provides only a hash of it. This approach is similar to Bitcoin’s “pay-to-hash” feature, but instead of adding new script commands we handle this case at the data structure level. 7 Conclusion We have investigated the major flaws in Bitcoin and proposed some possible solutions. These advantageous features and our ongoing development make new electronic cash system CryptoNote a serious rival to Bitcoin, outclassing all its forks. 14 26 This may be unnecessary if we can figure out a way to bound block size over time... This also cannot be correct. They just set "NewReward" to an upward-facing parabola where block size is the independent variable. So new reward blows up to infinity. If, on the other hand, the new reward is \(\max(0, BaseReward \cdot (1 - (BlkSize/M_n - 1)^2))\), then the new reward would be a downward facing parabola with peak at \(blocksize = M_n\), and with intercepts at \(Blocksize = 0\) and \(Blocksize = 2 \cdot M_n\). And that seems to be what they are trying to describe. However, this does not
ธุรกรรมที่ไม่สามารถติดตามได้
ในส่วนนี้ เราขอเสนอรูปแบบของธุรกรรมที่ไม่เปิดเผยตัวตนโดยสมบูรณ์ซึ่งตอบสนองทั้งความไม่สามารถตรวจสอบย้อนกลับได้
และเงื่อนไขที่ไม่สามารถเชื่อมโยงได้ คุณลักษณะที่สำคัญของโซลูชันของเราคือความเป็นอิสระ: ผู้ส่ง
ไม่จำเป็นต้องร่วมมือกับผู้ใช้รายอื่นหรือบุคคลที่สามที่เชื่อถือได้เพื่อทำธุรกรรมของเขา
ดังนั้นผู้เข้าร่วมแต่ละคนจึงสร้างการจราจรที่ปกคลุมอย่างอิสระ
4.1
การทบทวนวรรณกรรม
โครงการของเราอาศัยการเข้ารหัสแบบดั้งเดิมที่เรียกว่าลายเซ็นกลุ่ม นำเสนอครั้งแรกโดย
D. Chaum และ E. van Heyst [19] อนุญาตให้ผู้ใช้ลงนามข้อความในนามของกลุ่ม
หลังจากลงนามในข้อความที่ผู้ใช้ให้ (เพื่อวัตถุประสงค์ในการตรวจสอบ) ไม่ใช่สาธารณะของเขาเอง
1สิ่งนี้เรียกว่า “ขีดจำกัดซอฟต์” — ข้อจำกัดไคลเอนต์อ้างอิงสำหรับการสร้างบล็อกใหม่ ฮาร์ดสูงสุดของ
ขนาดบล็อกที่เป็นไปได้คือ 1 MB
4
หากจำเป็นซึ่งทำให้เกิดข้อเสียเปรียบหลัก น่าเสียดายที่เป็นการยากที่จะคาดเดาได้ว่าเมื่อใด
ค่าคงที่อาจจำเป็นต้องเปลี่ยนและการแทนที่อาจนำไปสู่ผลลัพธ์ที่เลวร้าย
ตัวอย่างที่ดีของการเปลี่ยนแปลงขีดจำกัดแบบฮาร์ดโค้ดที่นำไปสู่ผลที่ตามมาที่ร้ายแรงคือการบล็อก
จำกัดขนาดไว้ที่ 250kb1 ขีดจำกัดนี้เพียงพอที่จะรองรับธุรกรรมมาตรฐานได้ประมาณ 10,000 รายการ ใน
ต้นปี 2013 เกือบจะถึงขีดจำกัดนี้แล้ว และได้บรรลุข้อตกลงเพื่อเพิ่ม
ขีด จำกัด การเปลี่ยนแปลงถูกนำไปใช้ในกระเป๋าเงินเวอร์ชัน 0.8 และจบลงด้วยการแยกลูกโซ่ 24 บล็อก
และการโจมตีแบบใช้จ่ายสองครั้งที่ประสบความสำเร็จ [9] ในขณะที่จุดบกพร่องไม่ได้อยู่ในโปรโตคอล Bitcoin แต่
แต่ในกลไกฐานข้อมูลนั้นสามารถตรวจจับได้ง่ายโดยการทดสอบความเครียดแบบง่าย ๆ หากมี
ไม่มีการจำกัดขนาดบล็อกที่แนะนำโดยไม่ได้ตั้งใจ
ค่าคงที่ยังทำหน้าที่เป็นรูปแบบหนึ่งของจุดรวมศูนย์
แม้ว่าลักษณะแบบ peer-to-peer ของ
Bitcoin โหนดส่วนใหญ่ใช้ไคลเอนต์อ้างอิงอย่างเป็นทางการ [10] พัฒนาโดย
คนกลุ่มเล็กๆ กลุ่มนี้ตัดสินใจดำเนินการเปลี่ยนแปลงโปรโตคอล
และคนส่วนใหญ่ยอมรับการเปลี่ยนแปลงเหล่านี้โดยไม่คำนึงถึง "ความถูกต้อง" ของพวกเขา การตัดสินใจบางอย่างเกิดขึ้น
การอภิปรายอย่างดุเดือดและแม้กระทั่งเรียกร้องให้คว่ำบาตร [11] ซึ่งบ่งชี้ว่าชุมชนและ
นักพัฒนาซอฟต์แวร์อาจไม่เห็นด้วยกับประเด็นสำคัญบางประการ ดังนั้นจึงดูเหมือนสมเหตุสมผลที่จะมีโปรโตคอล
ด้วยตัวแปรที่ผู้ใช้สามารถกำหนดค่าได้และปรับได้เองซึ่งเป็นวิธีที่เป็นไปได้ในการหลีกเลี่ยงปัญหาเหล่านี้
2.5
สคริปต์ขนาดใหญ่
ระบบการเขียนสคริปต์ใน Bitcoin เป็นคุณลักษณะที่หนักและซับซ้อน มันอาจทำให้ใครคนหนึ่งสามารถสร้างได้
ธุรกรรมที่ซับซ้อน [12] แต่คุณลักษณะบางอย่างถูกปิดใช้งานเนื่องจากข้อกังวลด้านความปลอดภัยและ
บางตัวไม่เคยใช้ด้วยซ้ำ [13] สคริปต์ (รวมทั้งส่วนของผู้ส่งและผู้รับ)
สำหรับธุรกรรมยอดนิยมใน Bitcoin มีลักษณะดังนี้:
คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค.ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากอัลกอริธึมลายเซ็นพื้นฐานของเรา เราเลือกใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงร่างของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค. ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากเราเลือกอัลกอริธึมลายเซ็นพื้นฐานของเราe เพื่อใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงร่างของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 8 ลายเซ็นต์แหวนทำงานดังนี้: Alex ต้องการส่งข้อความถึง WikiLeaks เกี่ยวกับนายจ้างของเธอรั่วไหล พนักงานทุกคนในบริษัทของเธอมีคู่คีย์ส่วนตัว/สาธารณะ (Ri, Ui) เธอแต่ง ลายเซ็นของเธอพร้อมชุดอินพุตเป็นข้อความของเธอ, ม, คีย์ส่วนตัวของเธอ, Ri และของทุกคน กุญแจสาธารณะ (Ui;i=1...n) ทุกคน (โดยไม่ทราบรหัสส่วนตัว) สามารถตรวจสอบได้อย่างง่ายดาย ต้องใช้ บางคู่ (Rj, Uj) เพื่อสร้างลายเซ็น... คนที่ทำงาน สำหรับนายจ้างของอเล็กซ์... แต่โดยพื้นฐานแล้วมันเป็นการเดาสุ่มเพื่อดูว่าอันไหนจะเป็นอันไหน http://en.wikipedia.org/wiki/Ring_signature#Crypto-currencies http://link.springer.com/chapter/10.1007/3-540-45682-1_32#page-1 http://link.springer.com/chapter/10.1007/11424826_65 http://link.springer.com/chapter/10.1007/978-3-540-27800-9_28 http://link.springer.com/chapter/10.1007%2F11774716_9 โปรดสังเกตว่าลายเซ็นวงแหวนที่ลิงก์ได้ซึ่งอธิบายไว้ที่นี่เป็นสิ่งที่ตรงกันข้ามกับ "ไม่สามารถลิงก์ได้" อธิบายไว้ข้างต้น ที่นี่ เราสกัดกั้นข้อความสองข้อความ และเราสามารถระบุได้ว่าข้อความเดียวกันหรือไม่ ฝ่ายนั้นส่งพวกเขามา แม้ว่าเราจะยังคงไม่สามารถระบุได้ว่าใครคือฝ่ายนั้น ที่ คำจำกัดความของ "ไม่สามารถเชื่อมโยงได้" ที่ใช้ในการสร้าง Cryptonote หมายความว่าเราไม่สามารถระบุได้ว่า ฝ่ายเดียวกันกำลังรับพวกเขา ดังนั้นสิ่งที่เรามีจริงๆ ที่นี่คือสี่สิ่งที่เกิดขึ้น ระบบสามารถเชื่อมโยงหรือ ไม่สามารถเชื่อมโยงได้ ขึ้นอยู่กับว่าเป็นไปได้หรือไม่ที่จะตัดสินว่าผู้ส่งของ สองข้อความเหมือนกัน (ไม่ว่าจะต้องเพิกถอนการไม่เปิดเผยตัวตนหรือไม่ก็ตาม) และ ระบบสามารถยกเลิกการเชื่อมโยงหรือไม่สามารถยกเลิกการเชื่อมโยงได้ ขึ้นอยู่กับว่าเป็นไปได้หรือไม่ กำหนดว่าผู้รับข้อความทั้งสองคนเหมือนกันหรือไม่ (ไม่ว่าจะหรือไม่ก็ตาม สิ่งนี้จำเป็นต้องเพิกถอนการไม่เปิดเผยตัวตน) โปรดอย่าตำหนิฉันสำหรับคำศัพท์ที่น่ากลัวนี้ นักทฤษฎีกราฟน่าจะเป็นเช่นนั้น ยินดี บางท่านอาจจะรู้สึกสบายใจกว่าหากใช้ "ตัวรับที่ลิงก์ได้" กับ "ตัวส่งที่ลิงก์ได้" http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 เมื่อฉันอ่านสิ่งนี้ดูเหมือนเป็นคุณลักษณะที่โง่เขลา แล้วผมก็อ่านเจอว่ามันอาจจะเป็นฟีเจอร์สำหรับ การลงคะแนนเสียงทางอิเล็กทรอนิกส์ และนั่นก็ดูสมเหตุสมผล ค่อนข้างเจ๋งจากมุมมองนั้น แต่ฉัน ไม่แน่ใจโดยสิ้นเชิงเกี่ยวกับการใช้ลายเซ็นวงแหวนที่ตรวจสอบย้อนกลับได้โดยเจตนา http://search.ieice.org/bin/summary.php?id=e95-a_1_151
คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค. ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากอัลกอริธึมลายเซ็นพื้นฐานของเรา เราเลือกใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงร่างของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค. ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากเราเลือกอัลกอริธึมลายเซ็นพื้นฐานของเราe เพื่อใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงการของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 9 เอ้ย ผู้เขียน whitepaper นี้น่าจะใช้คำพูดได้ดีกว่านี้แน่นอน! สมมติว่าเป็น บริษัทที่พนักงานเป็นเจ้าของต้องการลงคะแนนเสียงว่าจะซื้อกิจการใหม่บางอย่างหรือไม่ สินทรัพย์ และอเล็กซ์และเบรนด้าก็เป็นพนักงานทั้งคู่ บริษัทจัดให้มีพนักงานแต่ละคนก ข้อความเช่น "ฉันลงคะแนนว่าใช่ในข้อเสนอ A!" ซึ่งมี metatainformation “ประเด็น” [PROP A] และขอให้พวกเขาลงนามด้วยลายเซ็นวงแหวนที่ติดตามได้หากพวกเขาสนับสนุนข้อเสนอ การใช้ลายเซ็นวงแหวนแบบดั้งเดิม พนักงานที่ไม่ซื่อสัตย์สามารถเซ็นข้อความได้หลายครั้ง อาจมี nonces ที่แตกต่างกันเพื่อที่จะลงคะแนนได้มากเท่าที่ต้องการ ในอีกทางหนึ่ง ในรูปแบบลายเซ็นวงแหวนที่ติดตามได้ อเล็กซ์จะไปลงคะแนน และคีย์ส่วนตัวของเธอจะมี ถูกนำมาใช้ในประเด็น [PROP A] ถ้าอเล็กซ์พยายามเซ็นข้อความเช่น "ฉัน เบรนด้า อนุมัติแล้ว" ข้อเสนอ A!" เพื่อ "เฟรม" เบรนดาและโหวตสองครั้ง ข้อความใหม่นี้จะมีปัญหาเช่นกัน [ข้อเสนอ ก]. เนื่องจากคีย์ส่วนตัวของ Alex ได้สะดุดปัญหา [PROP A] แล้ว ตัวตนของ Alex จะถูกเปิดเผยทันทีว่าเป็นการฉ้อโกง ซึ่งหน้ามันเจ๋งมาก! การเข้ารหัสบังคับใช้ความเท่าเทียมกันในการลงคะแนนเสียง http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 บทความนี้น่าสนใจ โดยพื้นฐานแล้วเป็นการสร้างลายเซ็นเฉพาะกิจ แต่ไม่มีสิ่งใดเลย ความยินยอมของผู้เข้าร่วมรายอื่น โครงสร้างของลายเซ็นอาจแตกต่างกัน ฉันไม่ได้ขุด ลึกและฉันก็ไม่เห็นว่ามันปลอดภัยหรือไม่ https://people.csail.mit.edu/rivest/AdidaHohenbergerRivest-AdHocGroupSignaturesFromHijackedKeypai ลายเซ็นกลุ่มเฉพาะกิจคือ: ลายเซ็นวงแหวนซึ่งเป็นลายเซ็นกลุ่มที่ไม่มีกลุ่ม ผู้จัดการ ไม่มีการรวมศูนย์ แต่อนุญาตให้สมาชิกในกลุ่มเฉพาะกิจสามารถอ้างสิทธิ์ดังกล่าวได้อย่างพิสูจน์ได้ ได้ (ไม่) ออกลายเซ็นนิรนามในนามของกลุ่ม http://link.springer.com/chapter/10.1007/11908739_9 นี่ไม่ถูกต้องนักจากความเข้าใจของฉัน และความเข้าใจของฉันก็คงจะเปลี่ยนตาม ฉันเจาะลึกโครงการนี้มากขึ้น แต่จากความเข้าใจของฉัน ลำดับชั้นมีลักษณะเช่นนี้ ลายเซ็นกลุ่ม: ผู้จัดการกลุ่มควบคุมการตรวจสอบย้อนกลับและความสามารถในการเพิ่มหรือลบสมาชิก จากการเป็นผู้ลงนาม Ring sigs: การสร้างกลุ่มตามอำเภอใจโดยไม่มีผู้จัดการกลุ่ม ไม่มีการเพิกถอนการไม่เปิดเผยตัวตน ไม่มีทางที่จะปฏิเสธตนเองจากลายเซ็นเฉพาะ ด้วยวงแหวนที่ตรวจสอบย้อนกลับและเชื่อมโยงได้ ลายเซ็น การไม่เปิดเผยตัวตนสามารถปรับขนาดได้เล็กน้อย ลายเซ็นกลุ่มเฉพาะกิจ: เช่นเดียวกับลายเซ็นวงแหวน แต่สมาชิกสามารถพิสูจน์ได้ว่าพวกเขาไม่ได้สร้างขึ้น ลายเซ็นเฉพาะ นี่เป็นสิ่งสำคัญเมื่อใครก็ตามในกลุ่มสามารถสร้างลายเซ็นได้ http://link.springer.com/chapter/10.1007/978-3-540-71677-8_13 อัลกอริธึมของฟูจิซากิและซูซูกิได้รับการปรับแต่งในภายหลังโดยผู้เขียนเพื่อให้เกิดเพียงครั้งเดียว ดังนั้น เราจะวิเคราะห์อัลกอริทึมของ Fujisaki และ Suzuki ไปพร้อมกับอัลกอริทึมใหม่แทน กว่าการไปที่นี่
คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค. ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากอัลกอริธึมลายเซ็นพื้นฐานของเรา เราเลือกใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงร่างของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 คีย์ แต่เป็นคีย์ของผู้ใช้ทั้งหมดในกลุ่มของเขา ผู้ตรวจสอบจะเชื่อมั่นว่าผู้ลงนามที่แท้จริงคือ a เป็นสมาชิกของกลุ่ม แต่ไม่สามารถระบุเฉพาะผู้ลงนามได้ โปรโตคอลดั้งเดิมจำเป็นต้องมีบุคคลที่สามที่เชื่อถือได้ (เรียกว่าผู้จัดการกลุ่ม) และเขาก็เป็นเช่นนั้น คนเดียวที่สามารถติดตามผู้ลงนามได้ รุ่นถัดไปเรียกว่าลายเซ็นแหวนแนะนำ โดย Rivest และคณะ ใน [34] เป็นโครงการอิสระที่ไม่มีผู้จัดการกลุ่มและไม่เปิดเผยตัวตน การเพิกถอน การปรับเปลี่ยนต่างๆ ของโครงร่างนี้ปรากฏในภายหลัง: ลายเซ็นวงแหวนที่เชื่อมโยงได้ [26, 27, 17] อนุญาตให้ตรวจสอบว่ามีการสร้างลายเซ็นสองรายการโดยสมาชิกกลุ่มคนเดียวกันหรือไม่ ซึ่งสามารถตรวจสอบย้อนกลับได้ ลายเซ็นต์แหวน [24, 23] จำกัด การไม่เปิดเผยตัวตนมากเกินไปโดยให้ความเป็นไปได้ในการติดตามผู้ลงนาม สองข้อความที่เกี่ยวข้องกับข้อมูลเมตาเดียวกัน (หรือ "แท็ก" ในแง่ของ [24]) โครงสร้างการเข้ารหัสที่คล้ายกันเรียกอีกอย่างว่าลายเซ็นกลุ่มเฉพาะกิจ [16, 38] มัน เน้นการสร้างกลุ่มตามอำเภอใจ ในขณะที่แผนลายเซ็นกลุ่ม/วงแหวนค่อนข้างจะสื่อถึง a ชุดสมาชิกคงที่ โดยส่วนใหญ่ โซลูชันของเราอิงจากงาน “Traceable ring Signature” โดย E. Fujisaki และเค. ซูซูกิ [24]. เพื่อที่จะแยกแยะความแตกต่างระหว่างอัลกอริธึมดั้งเดิมและการปรับเปลี่ยนของเรา เรียกแบบหลังว่าเป็นลายเซ็นกริ่งแบบครั้งเดียว โดยเน้นย้ำถึงความสามารถของผู้ใช้ในการสร้างลายเซ็นที่ถูกต้องเพียงอันเดียว ลายเซ็นใต้คีย์ส่วนตัวของเขา เราลดคุณสมบัติการตรวจสอบย้อนกลับลงและรักษาความสามารถในการเชื่อมโยงไว้ เพื่อให้เกิดเพียงครั้งเดียวเท่านั้น: กุญแจสาธารณะอาจปรากฏในชุดการตรวจสอบต่างประเทศจำนวนมากและ รหัสส่วนตัวสามารถใช้ในการสร้างลายเซ็นที่ไม่ระบุชื่อที่ไม่ซ้ำใครได้ ในกรณีที่ใช้จ่ายซ้ำซ้อน การพยายามลงนามทั้งสองลายเซ็นจะเชื่อมโยงเข้าด้วยกัน แต่ไม่จำเป็นต้องเปิดเผยผู้ลงนาม เพื่อวัตถุประสงค์ของเรา 4.2 คำจำกัดความ 4.2.1 พารามิเตอร์เส้นโค้งวงรี เนื่องจากเราเลือกอัลกอริธึมลายเซ็นพื้นฐานของเราe เพื่อใช้รูปแบบที่รวดเร็ว EdDSA ซึ่งได้รับการพัฒนาและ ดำเนินการโดยดีเจ เบิร์นสไตน์ และคณะ [18]. เช่นเดียวกับ ECDSA ของ Bitcoin มันขึ้นอยู่กับเส้นโค้งรูปวงรี ปัญหาลอการิทึมแบบไม่ต่อเนื่อง ดังนั้นโครงร่างของเราจึงสามารถนำไปใช้กับ Bitcoin ได้ในอนาคต พารามิเตอร์ทั่วไปคือ: q: จำนวนเฉพาะ; q = 2255 −19; d: องค์ประกอบของ Fq; ง = −121665/121666; E: สมการเส้นโค้งวงรี −x2 + y2 = 1 + dx2y2; G: จุดฐาน; G = (x, −4/5); l: ลำดับเฉพาะของจุดฐาน ล. = 2252 + 27742317777372353535851937790883648493; \(H_s\): ฟังก์ชันการเข้ารหัส hash \(\{0, 1\}^* \to \mathbb{F}_q\); \(H_p\): ฟังก์ชัน hash ที่กำหนดขึ้น \(E(\mathbb{F}_q) \to E(\mathbb{F}_q)\) 4.2.2 คำศัพท์เฉพาะทาง ความเป็นส่วนตัวที่ได้รับการปรับปรุงต้องใช้คำศัพท์ใหม่ซึ่งไม่ควรสับสนกับเอนทิตี Bitcoin ec-key ส่วนตัวเป็นคีย์ส่วนตัวโค้งวงรีมาตรฐาน: ตัวเลข \(a \in [1, l - 1]\); ec-key สาธารณะเป็นคีย์สาธารณะโค้งรูปไข่มาตรฐาน: จุด A = aG; keypair แบบครั้งเดียวคือคู่ของ ec-key ส่วนตัวและสาธารณะ 5 10 ความสามารถในการเชื่อมโยงในแง่ของ "ลายเซ็นวงแหวนที่เชื่อมโยงได้" หมายความว่าเราสามารถบอกได้ว่าธุรกรรมขาออกสองรายการมาจากแหล่งเดียวกันโดยไม่เปิดเผยว่าใครคือแหล่งที่มา ผู้เขียนอ่อนแอลง ความสามารถในการเชื่อมโยงเพื่อ (ก) รักษาความเป็นส่วนตัว แต่ยังคง (ข) มองเห็นธุรกรรมใด ๆ โดยใช้รหัสส่วนตัว ครั้งที่สองว่าไม่ถูกต้อง โอเค นี่คือคำถามลำดับเหตุการณ์ พิจารณาสถานการณ์ต่อไปนี้ การขุดของฉัน คอมพิวเตอร์จะมี blockchain ปัจจุบัน โดยจะมีบล็อกธุรกรรมที่เรียกใช้เอง ถูกต้องตามกฎหมาย มันจะทำงานกับบล็อกนั้นในปริศนา proof-of-work และจะมี รายการธุรกรรมที่รอดำเนินการที่จะเพิ่มในบล็อกถัดไป มันยังจะส่งใหม่อีกด้วย ธุรกรรมในกลุ่มธุรกรรมที่รอดำเนินการนั้น ถ้าผมแก้บล็อกต่อไปไม่ได้แต่ มีคนอื่นทำ ฉันได้รับสำเนาที่อัปเดตของ blockchain บล็อกที่ฉันกำลังทำงานอยู่และ รายการธุรกรรมที่รอดำเนินการของฉันทั้งสองอาจมีธุรกรรมบางรายการที่รวมเข้าด้วยกันแล้ว ลงใน blockchain คลี่คลายบล็อกที่รอดำเนินการของฉัน รวมเข้ากับรายการธุรกรรมที่รอดำเนินการของฉัน แล้วเรียกสิ่งนั้น กลุ่มธุรกรรมที่รอดำเนินการของฉัน ลบสิ่งที่อยู่ใน blockchain อย่างเป็นทางการออก ตอนนี้ฉันจะทำอย่างไร? ฉันควรดำเนินการก่อนและ "ลบการใช้จ่ายซ้ำซ้อนทั้งหมด" หรือไม่ ในอีกทางหนึ่ง ฉันควรค้นหาผ่านรายการและตรวจสอบให้แน่ใจว่ายังไม่มีคีย์ส่วนตัวแต่ละรายการ ใช้แล้ว และถ้าได้ใช้อยู่ในรายการข้าพเจ้าแล้ว ข้าพเจ้าก็ได้รับสำเนาฉบับแรกก่อน และด้วยเหตุนี้ สำเนาเพิ่มเติมใด ๆ ถือเป็นสิ่งผิดกฎหมาย ดังนั้นฉันจึงดำเนินการลบอินสแตนซ์ทั้งหมดหลังจากครั้งแรก ของคีย์ส่วนตัวอันเดียวกัน เรขาคณิตพีชคณิตไม่เคยเหมาะกับฉันเลย http://en.wikipedia.org/wiki/EdDSA ความเร็วขนาดนี้ว้าวมาก นี่คือเรขาคณิตเชิงพีชคณิตสำหรับการชนะ ไม่ใช่ว่าฉันไม่รู้อะไรเลย เกี่ยวกับเรื่องนั้น บันทึกแบบแยกจะมีปัญหาหรือไม่ก็ตามกำลังดำเนินไปอย่างรวดเร็ว และคอมพิวเตอร์ควอนตัมก็กินพวกมัน สำหรับอาหารเช้า http://link.springer.com/article/10.1007/s13389-012-0027-1 นี่กลายเป็นตัวเลขที่สำคัญมาก แต่ไม่มีคำอธิบายหรือการอ้างอิงว่าตัวเลขดังกล่าวเป็นอย่างไร ได้รับเลือก เพียงแค่เลือกจำนวนเฉพาะขนาดใหญ่ที่ทราบเพียงตัวเดียวก็ไม่เป็นไร แต่ถ้าทราบจำนวนเฉพาะนั้น ข้อเท็จจริงเกี่ยวกับไพรม์ขนาดใหญ่นี้ ที่อาจมีอิทธิพลต่อการเลือกของเรา Cryptonote หลากหลายรูปแบบ สามารถเลือกค่าที่แตกต่างกันของ ใช่ แต่ไม่มีการสนทนาในบทความนี้เกี่ยวกับวิธีการนั้น ตัวเลือกจะส่งผลต่อการเลือกพารามิเตอร์ส่วนกลางอื่น ๆ ของเราที่แสดงอยู่ในหน้า 5 บทความนี้ต้องการหัวข้อเกี่ยวกับการเลือกค่าพารามิเตอร์
คีย์ผู้ใช้ส่วนตัวคือคู่ (a, b) ของคีย์ ec ส่วนตัวสองตัวที่แตกต่างกัน รหัสติดตามคือคู่ (a, B) ของ ec-key ส่วนตัวและสาธารณะ (โดยที่ B = bG และ a ̸= b) รหัสผู้ใช้สาธารณะคือคู่ (A, B) ของสองคีย์ ec สาธารณะที่ได้มาจาก (a, b); ที่อยู่มาตรฐานคือการแสดงรหัสผู้ใช้สาธารณะที่กำหนดให้กับสตริงที่เป็นมิตรกับมนุษย์ มีการแก้ไขข้อผิดพลาด ที่อยู่ที่ถูกตัดทอนเป็นตัวแทนของครึ่งหลัง (จุด B) ของรหัสผู้ใช้สาธารณะที่กำหนด เป็นสตริงที่เป็นมิตรต่อมนุษย์พร้อมการแก้ไขข้อผิดพลาด โครงสร้างธุรกรรมยังคงคล้ายกับโครงสร้างใน Bitcoin: ผู้ใช้ทุกคนสามารถเลือกได้ การชำระเงินขาเข้าที่เป็นอิสระหลายรายการ (ผลลัพธ์ของธุรกรรม) ลงนามด้วยสิ่งที่เกี่ยวข้อง กุญแจส่วนตัวและส่งไปยังปลายทางที่แตกต่างกัน ตรงกันข้ามกับโมเดลของ Bitcoin ซึ่งผู้ใช้มีคีย์ส่วนตัวและคีย์สาธารณะที่ไม่ซ้ำกันใน โมเดลที่นำเสนอ ผู้ส่งจะสร้างคีย์สาธารณะแบบครั้งเดียวตามที่อยู่ของผู้รับและ ข้อมูลสุ่มบางอย่าง ในแง่นี้ ธุรกรรมขาเข้าสำหรับผู้รับคนเดียวกันจะถูกส่งไปยัง กุญแจสาธารณะแบบครั้งเดียว (ไม่ใช่โดยตรงไปยังที่อยู่ที่ไม่ซ้ำกัน) และมีเพียงผู้รับเท่านั้นที่สามารถกู้คืนได้ ส่วนตัวที่เกี่ยวข้องเพื่อแลกเงินของเขา (โดยใช้รหัสส่วนตัวเฉพาะของเขา) ผู้รับก็ได้ ใช้จ่ายเงินโดยใช้ลายเซ็นต์แหวน โดยรักษาความเป็นเจ้าของและการใช้จ่ายจริงโดยไม่เปิดเผยชื่อ รายละเอียดของระเบียบการจะอธิบายไว้ในส่วนย่อยถัดไป 4.3 การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ที่อยู่ Bitcoin แบบคลาสสิก เมื่อเผยแพร่แล้ว จะกลายเป็นตัวระบุที่ชัดเจนสำหรับขาเข้า การชำระเงิน เชื่อมโยงเข้าด้วยกันและผูกเข้ากับนามแฝงของผู้รับ หากใครต้องการ รับธุรกรรม "ผูกมัด" เขาควรแจ้งที่อยู่ของเขาไปยังผู้ส่งโดยช่องทางส่วนตัว หากเขาต้องการรับธุรกรรมที่แตกต่างซึ่งไม่สามารถพิสูจน์ได้ว่าเป็นของเจ้าของคนเดียวกัน เขาควรสร้างที่อยู่ที่แตกต่างกันทั้งหมดและไม่เคยเผยแพร่โดยใช้นามแฝงของเขาเอง สาธารณะ ส่วนตัว อลิซ แครอล Addr ของ Bob 1 Addr ของ Bob 2 กุญแจของบ๊อบ 1 กุญแจของบ๊อบ 2 บ๊อบ รูปที่ 2 โมเดล Bitcoin คีย์/ธุรกรรมแบบดั้งเดิม เราเสนอวิธีแก้ปัญหาเพื่อให้ผู้ใช้สามารถเผยแพร่ที่อยู่เดียวและรับโดยไม่มีเงื่อนไข การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ปลายทางของเอาต์พุต CryptoNote แต่ละรายการ (โดยค่าเริ่มต้น) คือคีย์สาธารณะ มาจากที่อยู่ของผู้รับและข้อมูลสุ่มของผู้ส่ง ข้อได้เปรียบหลักเทียบกับ Bitcoin คือคีย์ปลายทางทุกอันจะไม่ซ้ำกันตามค่าเริ่มต้น (เว้นแต่ผู้ส่งจะใช้ข้อมูลเดียวกันสำหรับแต่ละรายการ ของการทำธุรกรรมของเขาไปยังผู้รับคนเดียวกัน) ดังนั้นจึงไม่มีปัญหาเช่น “การใช้ที่อยู่ซ้ำ” โดย การออกแบบและผู้สังเกตการณ์ไม่สามารถระบุได้ว่าธุรกรรมใดๆ ถูกส่งไปยังที่อยู่หรือลิงก์เฉพาะหรือไม่ ที่อยู่สองแห่งพร้อมกัน 6 คีย์ผู้ใช้ส่วนตัวคือคู่ (a, b) ของคีย์ ec ส่วนตัวสองตัวที่แตกต่างกัน รหัสติดตามคือคู่ (a, B) ของ ec-key ส่วนตัวและสาธารณะ (โดยที่ B = bG และ a ̸= b) รหัสผู้ใช้สาธารณะคือคู่ (A, B) ของสองคีย์ ec สาธารณะที่ได้มาจาก (a, b); ที่อยู่มาตรฐานคือการแสดงรหัสผู้ใช้สาธารณะที่กำหนดให้กับสตริงที่เป็นมิตรกับมนุษย์ มีการแก้ไขข้อผิดพลาด ที่อยู่ที่ถูกตัดทอนเป็นตัวแทนของครึ่งหลัง (จุด B) ของรหัสผู้ใช้สาธารณะที่กำหนด เป็นสตริงที่เป็นมิตรต่อมนุษย์พร้อมการแก้ไขข้อผิดพลาด โครงสร้างธุรกรรมยังคงคล้ายกับโครงสร้างใน Bitcoin: ผู้ใช้ทุกคนสามารถเลือกได้ การชำระเงินขาเข้าที่เป็นอิสระหลายรายการ (ผลลัพธ์ของธุรกรรม) ลงนามด้วยสิ่งที่เกี่ยวข้อง กุญแจส่วนตัวและส่งไปยังปลายทางที่แตกต่างกัน ตรงกันข้ามกับโมเดลของ Bitcoin ซึ่งผู้ใช้มีคีย์ส่วนตัวและคีย์สาธารณะที่ไม่ซ้ำกันใน โมเดลที่นำเสนอ ผู้ส่งจะสร้างคีย์สาธารณะแบบครั้งเดียวตามที่อยู่ของผู้รับและ ข้อมูลสุ่มบางอย่าง ในแง่นี้ ธุรกรรมขาเข้าสำหรับผู้รับคนเดียวกันจะถูกส่งไปยัง กุญแจสาธารณะแบบครั้งเดียว (ไม่ใช่โดยตรงไปยังที่อยู่ที่ไม่ซ้ำกัน) และมีเพียงผู้รับเท่านั้นที่สามารถกู้คืนได้ ส่วนตัวที่เกี่ยวข้องเพื่อแลกเงินของเขา (โดยใช้รหัสส่วนตัวเฉพาะของเขา) ผู้รับก็ได้ ใช้จ่ายเงินโดยใช้ลายเซ็นต์แหวน โดยรักษาความเป็นเจ้าของและการใช้จ่ายจริงโดยไม่เปิดเผยชื่อ รายละเอียดของระเบียบการจะอธิบายไว้ในส่วนย่อยถัดไป 4.3 การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ที่อยู่ Bitcoin แบบคลาสสิก เมื่อเผยแพร่แล้ว จะกลายเป็นตัวระบุที่ชัดเจนสำหรับขาเข้า การชำระเงิน เชื่อมโยงเข้าด้วยกันและผูกเข้ากับนามแฝงของผู้รับ หากใครต้องการ รับธุรกรรม "ผูกมัด" เขาควรแจ้งที่อยู่ของเขาไปยังผู้ส่งโดยช่องทางส่วนตัว หากเขาต้องการรับธุรกรรมที่แตกต่างซึ่งไม่สามารถพิสูจน์ได้ว่าเป็นของเจ้าของคนเดียวกัน เขาควรสร้างที่อยู่ที่แตกต่างกันทั้งหมดและไม่เคยเผยแพร่โดยใช้นามแฝงของเขาเอง สาธารณะ ส่วนตัว อลิซ แครอล Addr ของ Bob 1 Addr ของ Bob 2 กุญแจของบ๊อบ 1 กุญแจของบ๊อบ 2 บ๊อบ รูปที่ 2. ตัวดัดแปลง Bitcoin คีย์/ธุรกรรมแบบดั้งเดิมเอล เราเสนอวิธีแก้ปัญหาเพื่อให้ผู้ใช้สามารถเผยแพร่ที่อยู่เดียวและรับโดยไม่มีเงื่อนไข การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ปลายทางของเอาต์พุต CryptoNote แต่ละรายการ (โดยค่าเริ่มต้น) คือคีย์สาธารณะ มาจากที่อยู่ของผู้รับและข้อมูลสุ่มของผู้ส่ง ข้อได้เปรียบหลักเทียบกับ Bitcoin คือคีย์ปลายทางทุกอันจะไม่ซ้ำกันตามค่าเริ่มต้น (เว้นแต่ผู้ส่งจะใช้ข้อมูลเดียวกันสำหรับแต่ละรายการ ของการทำธุรกรรมของเขาไปยังผู้รับคนเดียวกัน) ดังนั้นจึงไม่มีปัญหาเช่น “การใช้ที่อยู่ซ้ำ” โดย การออกแบบและผู้สังเกตการณ์ไม่สามารถระบุได้ว่าธุรกรรมใดๆ ถูกส่งไปยังที่อยู่หรือลิงก์เฉพาะหรือไม่ ที่อยู่สองแห่งพร้อมกัน 6 11 นี่ก็เหมือนกับ Bitcoin แต่ด้วยตู้ไปรษณีย์ที่ไม่ระบุตัวตนที่ไม่มีที่สิ้นสุด ผู้รับเท่านั้นที่แลกได้ การสร้างคีย์ส่วนตัวที่ไม่เปิดเผยตัวตนเหมือนกับลายเซ็นวงแหวน Bitcoin ทำงานในลักษณะนี้ ถ้าอเล็กซ์มี 0.112 Bitcoin ในกระเป๋าสตางค์ของเธอที่เธอเพิ่งได้รับจากแฟรงก์ เธอมีลายเซ็นจริงๆ ข้อความ "ฉัน [FRANK] ส่ง 0.112 Bitcoin ไปที่ [alex] + H0 + N0" โดยที่ 1) Frank ได้ลงนามใน ข้อความด้วยคีย์ส่วนตัวของเขา [FRANK] 2) Frank ได้ลงนามข้อความกับสาธารณะของ Alex คีย์ [alex] 3) Frank ได้รวมประวัติของ bitcoin, H0 และ 4) Frank ไว้ด้วย รวมบิตข้อมูลสุ่มที่เรียกว่า nonce, N0 ถ้าอเล็กซ์ต้องการส่ง 0.011 Bitcoin ถึงชาร์ลีน เธอจะรับข้อความของแฟรงค์ และเธอ จะตั้งค่านั้นเป็น H1 และลงนามสองข้อความ: ข้อความหนึ่งสำหรับธุรกรรมของเธอ และอีกข้อความหนึ่งสำหรับการเปลี่ยนแปลง H1= "ฉัน [FRANK] ส่ง 0.112 Bitcoin ถึง [alex] + H0 + N" "ฉัน [ALEX] ส่ง 0.011 Bitcoin ถึง [charlene] + H1 + N1" "ฉัน [ALEX] ส่ง 0.101 Bitcoin เปลี่ยนเป็น [alex] + H1 + N2" โดยที่อเล็กซ์ลงนามทั้งสองข้อความด้วยคีย์ส่วนตัวของเธอ [ALEX] ซึ่งเป็นข้อความแรกกับชาร์ลีน รหัสสาธารณะ [charlene] ข้อความที่สองพร้อมรหัสสาธารณะของ Alex [alex] และรวมถึง ประวัติและ nonces N1 และ N2 ที่สร้างขึ้นแบบสุ่มบางส่วนอย่างเหมาะสม Cryptonote ทำงานในลักษณะนี้: หาก Alex มี Cryptonote 0.112 ในกระเป๋าเงินของเธอที่เธอเพิ่งได้รับจาก Frank เธอก็จะมีลายเซ็นจริงๆ ข้อความ "ฉัน [ใครบางคนในกลุ่มเฉพาะกิจ] ส่ง 0.112 Cryptonote ไปยัง [ที่อยู่แบบครั้งเดียว] + H0 + N0" อเล็กซ์ค้นพบว่านี่คือเงินของเธอโดยการตรวจสอบคีย์ส่วนตัวของเธอ [ALEX] [ที่อยู่แบบครั้งเดียว] สำหรับทุกข้อความที่ส่ง และหากเธอต้องการใช้จ่าย เธอก็ทำเช่นนั้น ตามวิธีต่อไปนี้ เธอเลือกผู้รับเงิน บางทีชาร์ลีนอาจเริ่มโหวตให้โดรนโจมตีแล้วก็ได้ อเล็กซ์ต้องการส่งเงินให้เบรนดาแทน อเล็กซ์จึงค้นหากุญแจสาธารณะของเบรนดา [เบรนดา] และใช้คีย์ส่วนตัวของเธอเอง [ALEX] เพื่อสร้างที่อยู่แบบครั้งเดียว [ALEX+brenda] เธอ จากนั้นเลือกคอลเลกชัน C โดยพลการจากเครือข่ายของผู้ใช้ cryptonote และเธอก็สร้าง ลายเซ็นต์จากกลุ่มเฉพาะกิจนี้ เรากำหนดประวัติของเราเป็นข้อความก่อนหน้าเพิ่ม nonces และดำเนินการตามปกติหรือไม่ H1 = "ฉัน [ใครบางคนในกลุ่มเฉพาะกิจ] ส่ง 0.112 Cryptonote ไปที่ [ที่อยู่แบบครั้งเดียว] + H0 + N0" "ฉัน [คนในคอลเลกชั่น C] ส่ง Cryptonote 0.011 ไปที่ [ที่อยู่ครั้งเดียวทำจากALEX+brenda] + H1 + N1" "ฉัน [คนในคอลเลกชัน C] ส่ง 0.101 Cryptonote เป็นการเปลี่ยนเป็น [one-time-address-madefrom-ALEX+alex] + H1 + N2" ตอนนี้ Alex และ Brenda ต่างสแกนข้อความขาเข้าทั้งหมดเพื่อหาที่อยู่แบบครั้งเดียว สร้างขึ้นโดยใช้กุญแจของพวกเขา หากพวกเขาพบข้อความนั้นก็ถือเป็นข้อความใหม่ของพวกเขาเอง คริปโตโน๊ต! และถึงอย่างนั้น ธุรกรรมก็ยังคงไปถึง blockchain หากเหรียญเข้าที่อยู่นั้น เป็นที่รู้กันว่าส่งมาจากอาชญากร ผู้มีส่วนร่วมทางการเมือง หรือจากคณะกรรมการและบัญชี ด้วยงบประมาณที่เข้มงวด (เช่น การยักยอก) หรือหากเจ้าของเหรียญเหล่านี้คนใหม่เคยทำผิดพลาด และส่งเหรียญเหล่านี้ไปยังที่อยู่ทั่วไปซึ่งมีเหรียญที่เขารู้จักเป็นเจ้าของ นั่นก็คือจิ๊กไม่เปิดเผยตัวตน เพิ่มขึ้นเป็น bitcoin
คีย์ผู้ใช้ส่วนตัวคือคู่ (a, b) ของคีย์ ec ส่วนตัวสองตัวที่แตกต่างกัน รหัสติดตามคือคู่ (a, B) ของ ec-key ส่วนตัวและสาธารณะ (โดยที่ B = bG และ a ̸= b) รหัสผู้ใช้สาธารณะคือคู่ (A, B) ของสองคีย์ ec สาธารณะที่ได้มาจาก (a, b); ที่อยู่มาตรฐานคือการแสดงรหัสผู้ใช้สาธารณะที่กำหนดให้กับสตริงที่เป็นมิตรกับมนุษย์ มีการแก้ไขข้อผิดพลาด ที่อยู่ที่ถูกตัดทอนเป็นตัวแทนของครึ่งหลัง (จุด B) ของรหัสผู้ใช้สาธารณะที่กำหนด เป็นสตริงที่เป็นมิตรต่อมนุษย์พร้อมการแก้ไขข้อผิดพลาด โครงสร้างธุรกรรมยังคงคล้ายกับโครงสร้างใน Bitcoin: ผู้ใช้ทุกคนสามารถเลือกได้ การชำระเงินขาเข้าที่เป็นอิสระหลายรายการ (ผลลัพธ์ของธุรกรรม) ลงนามด้วยสิ่งที่เกี่ยวข้อง กุญแจส่วนตัวและส่งไปยังปลายทางที่แตกต่างกัน ตรงกันข้ามกับโมเดลของ Bitcoin ซึ่งผู้ใช้มีคีย์ส่วนตัวและสาธารณะที่ไม่ซ้ำกันใน โมเดลที่นำเสนอ ผู้ส่งจะสร้างคีย์สาธารณะแบบครั้งเดียวตามที่อยู่ของผู้รับและ ข้อมูลสุ่มบางอย่าง ในแง่นี้ ธุรกรรมขาเข้าสำหรับผู้รับคนเดียวกันจะถูกส่งไปยัง กุญแจสาธารณะแบบครั้งเดียว (ไม่ใช่โดยตรงไปยังที่อยู่ที่ไม่ซ้ำกัน) และมีเพียงผู้รับเท่านั้นที่สามารถกู้คืนได้ ส่วนตัวที่เกี่ยวข้องเพื่อแลกเงินของเขา (โดยใช้รหัสส่วนตัวเฉพาะของเขา) ผู้รับก็ได้ ใช้จ่ายเงินโดยใช้ลายเซ็นต์แหวน โดยรักษาความเป็นเจ้าของและการใช้จ่ายจริงโดยไม่เปิดเผยชื่อ รายละเอียดของระเบียบการจะอธิบายไว้ในส่วนย่อยถัดไป 4.3 การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ที่อยู่ Bitcoin แบบคลาสสิก เมื่อเผยแพร่แล้ว จะกลายเป็นตัวระบุที่ชัดเจนสำหรับขาเข้า การชำระเงิน เชื่อมโยงเข้าด้วยกันและผูกเข้ากับนามแฝงของผู้รับ หากใครต้องการ รับธุรกรรม "ผูกมัด" เขาควรแจ้งที่อยู่ของเขาไปยังผู้ส่งโดยช่องทางส่วนตัว หากเขาต้องการรับธุรกรรมที่แตกต่างซึ่งไม่สามารถพิสูจน์ได้ว่าเป็นของเจ้าของคนเดียวกัน เขาควรสร้างที่อยู่ที่แตกต่างกันทั้งหมดและไม่เคยเผยแพร่โดยใช้นามแฝงของเขาเอง สาธารณะ ส่วนตัว อลิซ แครอล Addr ของ Bob 1 Addr ของ Bob 2 กุญแจของบ๊อบ 1 กุญแจของบ๊อบ 2 บ๊อบ รูปที่ 2 โมเดล Bitcoin คีย์/ธุรกรรมแบบดั้งเดิม เราเสนอวิธีแก้ปัญหาเพื่อให้ผู้ใช้สามารถเผยแพร่ที่อยู่เดียวและรับโดยไม่มีเงื่อนไข การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ปลายทางของเอาต์พุต CryptoNote แต่ละรายการ (โดยค่าเริ่มต้น) คือคีย์สาธารณะ มาจากที่อยู่ของผู้รับและข้อมูลสุ่มของผู้ส่ง ข้อได้เปรียบหลักเทียบกับ Bitcoin คือคีย์ปลายทางทุกอันจะไม่ซ้ำกันตามค่าเริ่มต้น (เว้นแต่ผู้ส่งจะใช้ข้อมูลเดียวกันสำหรับแต่ละรายการ ของการทำธุรกรรมของเขาไปยังผู้รับคนเดียวกัน) ดังนั้นจึงไม่มีปัญหาเช่น “การใช้ที่อยู่ซ้ำ” โดย การออกแบบและผู้สังเกตการณ์ไม่สามารถระบุได้ว่าธุรกรรมใดๆ ถูกส่งไปยังที่อยู่หรือลิงก์เฉพาะหรือไม่ ที่อยู่สองแห่งพร้อมกัน 6 คีย์ผู้ใช้ส่วนตัวคือคู่ (a, b) ของคีย์ ec ส่วนตัวสองตัวที่แตกต่างกัน รหัสติดตามคือคู่ (a, B) ของ ec-key ส่วนตัวและสาธารณะ (โดยที่ B = bG และ a ̸= b) รหัสผู้ใช้สาธารณะคือคู่ (A, B) ของสองคีย์ ec สาธารณะที่ได้มาจาก (a, b); ที่อยู่มาตรฐานคือการแสดงรหัสผู้ใช้สาธารณะที่กำหนดให้กับสตริงที่เป็นมิตรกับมนุษย์ มีการแก้ไขข้อผิดพลาด ที่อยู่ที่ถูกตัดทอนเป็นตัวแทนของครึ่งหลัง (จุด B) ของรหัสผู้ใช้สาธารณะที่กำหนด เป็นสตริงที่เป็นมิตรต่อมนุษย์พร้อมการแก้ไขข้อผิดพลาด โครงสร้างธุรกรรมยังคงคล้ายกับโครงสร้างใน Bitcoin: ผู้ใช้ทุกคนสามารถเลือกได้ การชำระเงินขาเข้าที่เป็นอิสระหลายรายการ (ผลลัพธ์ของธุรกรรม) ลงนามด้วยสิ่งที่เกี่ยวข้อง กุญแจส่วนตัวและส่งไปยังปลายทางที่แตกต่างกัน ตรงกันข้ามกับโมเดลของ Bitcoin ซึ่งผู้ใช้มีคีย์ส่วนตัวและสาธารณะที่ไม่ซ้ำกันใน โมเดลที่นำเสนอ ผู้ส่งจะสร้างคีย์สาธารณะแบบครั้งเดียวตามที่อยู่ของผู้รับและ ข้อมูลสุ่มบางอย่าง ในแง่นี้ ธุรกรรมขาเข้าสำหรับผู้รับคนเดียวกันจะถูกส่งไปยัง กุญแจสาธารณะแบบครั้งเดียว (ไม่ใช่โดยตรงไปยังที่อยู่ที่ไม่ซ้ำกัน) และมีเพียงผู้รับเท่านั้นที่สามารถกู้คืนได้ ส่วนตัวที่เกี่ยวข้องเพื่อแลกเงินของเขา (โดยใช้รหัสส่วนตัวเฉพาะของเขา) ผู้รับก็ได้ ใช้จ่ายเงินโดยใช้ลายเซ็นต์แหวน โดยรักษาความเป็นเจ้าของและการใช้จ่ายจริงโดยไม่เปิดเผยชื่อ รายละเอียดของระเบียบการจะอธิบายไว้ในส่วนย่อยถัดไป 4.3 การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ที่อยู่ Bitcoin แบบคลาสสิก เมื่อเผยแพร่แล้ว จะกลายเป็นตัวระบุที่ชัดเจนสำหรับขาเข้า การชำระเงิน เชื่อมโยงเข้าด้วยกันและผูกเข้ากับนามแฝงของผู้รับ หากใครต้องการ รับธุรกรรม "ผูกมัด" เขาควรแจ้งที่อยู่ของเขาไปยังผู้ส่งโดยช่องทางส่วนตัว หากเขาต้องการรับธุรกรรมที่แตกต่างซึ่งไม่สามารถพิสูจน์ได้ว่าเป็นของเจ้าของคนเดียวกัน เขาควรสร้างที่อยู่ที่แตกต่างกันทั้งหมดและไม่เคยเผยแพร่โดยใช้นามแฝงของเขาเอง สาธารณะ ส่วนตัว อลิซ แครอล Addr ของ Bob 1 Addr ของ Bob 2 กุญแจของบ๊อบ 1 กุญแจของบ๊อบ 2 บ๊อบ รูปที่ 2. mod Bitcoin คีย์/ธุรกรรมแบบดั้งเดิมเอล เราเสนอวิธีแก้ปัญหาเพื่อให้ผู้ใช้สามารถเผยแพร่ที่อยู่เดียวและรับโดยไม่มีเงื่อนไข การชำระเงินที่ไม่สามารถเชื่อมโยงได้ ปลายทางของเอาต์พุต CryptoNote แต่ละรายการ (โดยค่าเริ่มต้น) คือคีย์สาธารณะ มาจากที่อยู่ของผู้รับและข้อมูลสุ่มของผู้ส่ง ข้อได้เปรียบหลักเทียบกับ Bitcoin คือคีย์ปลายทางทุกอันจะไม่ซ้ำกันตามค่าเริ่มต้น (เว้นแต่ผู้ส่งจะใช้ข้อมูลเดียวกันสำหรับแต่ละรายการ ของการทำธุรกรรมของเขาไปยังผู้รับคนเดียวกัน) ดังนั้นจึงไม่มีปัญหาเช่น “การใช้ที่อยู่ซ้ำ” โดย การออกแบบและผู้สังเกตการณ์ไม่สามารถระบุได้ว่าธุรกรรมใดๆ ถูกส่งไปยังที่อยู่หรือลิงก์เฉพาะหรือไม่ ที่อยู่สองแห่งพร้อมกัน 6 12 ดังนั้น แทนที่จะให้ผู้ใช้ส่งเหรียญจากที่อยู่ (ซึ่งเป็นกุญแจสาธารณะจริงๆ) ไปยังที่อยู่ (กุญแจสาธารณะอื่น) โดยใช้กุญแจส่วนตัว ผู้ใช้จะส่งเหรียญจากตู้ไปรษณีย์แบบครั้งเดียว (ซึ่งสร้างโดยใช้รหัสสาธารณะของเพื่อนของคุณ) ไปยังตู้ไปรษณีย์แบบครั้งเดียว (ในทำนองเดียวกัน) โดยใช้ของคุณ คีย์ส่วนตัวของตัวเอง ในแง่หนึ่ง เรากำลังพูดว่า "เอาล่ะ ทุกคนเอาเงินของคุณไปในขณะที่เงินกำลังเป็นอยู่ โอนไปรอบ ๆ ! แค่รู้ว่ากุญแจของเรา สามารถ เปิดกล่องนั้นและกล่องนั้นได้ เรารู้ว่ามีเงินอยู่ในกล่องเท่าไหร่ อย่าวางลายนิ้วมือของคุณบนตู้ไปรษณีย์หรือ ใช้จริงแค่แลกกล่องที่เต็มไปด้วยเงินสดนั่นเอง โดยที่เราไม่รู้ว่าใครส่งมา อะไร แต่เนื้อหาของคำปราศรัยสาธารณะเหล่านี้ยังคงไม่มีความขัดแย้ง ทดแทนได้ แบ่งแยกได้ และ ยังคงมีคุณสมบัติที่ดีอื่น ๆ ของเงินที่เราต้องการเช่น Bitcoin" ชุดตู้ไปรษณีย์ที่ไม่มีที่สิ้นสุด คุณเผยแพร่ที่อยู่ฉันมีรหัสส่วนตัว ฉันใช้รหัสส่วนตัวและที่อยู่ของคุณและ ข้อมูลสุ่มบางส่วนเพื่อสร้างกุญแจสาธารณะ อัลกอริธึมได้รับการออกแบบเช่นนั้นเนื่องจากคุณ ที่อยู่ถูกใช้เพื่อสร้างกุญแจสาธารณะ มีเพียงกุญแจส่วนตัวของคุณเท่านั้นที่ใช้งานได้เพื่อปลดล็อค ข้อความ ผู้สังเกตการณ์ อีฟ เห็นคุณเผยแพร่ที่อยู่ของคุณ และเห็นกุญแจสาธารณะที่ฉันประกาศ อย่างไรก็ตาม เธอไม่รู้ว่าฉันประกาศกุญแจสาธารณะของฉันตามที่อยู่ของคุณหรือของเธอ หรือของเบรนดา หรือของชาร์ลีนหรือใครก็ตาม เธอตรวจสอบคีย์ส่วนตัวของเธอกับคีย์สาธารณะที่ฉันประกาศ และเห็นว่ามันไม่ได้ผล มันไม่ใช่เงินของเธอ เธอไม่รู้จักรหัสส่วนตัวของคนอื่นและ เฉพาะผู้รับข้อความเท่านั้นที่มีรหัสส่วนตัวที่สามารถปลดล็อคข้อความได้ เลยไม่มีใคร. การฟังสามารถระบุได้ว่าใครได้รับเงินน้อยกว่ามากจึงเอาเงินไป
สาธารณะ ส่วนตัว อลิซ แครอล คีย์ครั้งเดียว คีย์ครั้งเดียว คีย์ครั้งเดียว บ๊อบ กุญแจของบ๊อบ ที่อยู่ของบ๊อบ รูปที่ 3 คีย์ CryptoNote/โมเดลธุรกรรม ขั้นแรก ผู้ส่งทำการแลกเปลี่ยน Diffie-Hellman เพื่อรับความลับที่แบ่งปันจากข้อมูลของเขาและ ครึ่งหนึ่งของที่อยู่ผู้รับ จากนั้นเขาจะคำนวณคีย์ปลายทางแบบครั้งเดียวโดยใช้การแชร์ ความลับและที่อยู่ครึ่งหลัง ผู้รับต้องใช้คีย์ ec ที่แตกต่างกันสองชุด สำหรับสองขั้นตอนนี้ ดังนั้นที่อยู่ CryptoNote มาตรฐานจึงมีขนาดใหญ่เกือบสองเท่าของกระเป๋าเงิน Bitcoin ที่อยู่ ผู้รับยังทำการแลกเปลี่ยน Diffie-Hellman เพื่อกู้คืนสิ่งที่เกี่ยวข้องด้วย รหัสลับ ลำดับธุรกรรมมาตรฐานจะเป็นดังนี้: 1. อลิซต้องการส่งการชำระเงินให้กับ Bob ซึ่งได้เผยแพร่ที่อยู่มาตรฐานของเขาแล้ว เธอ แกะที่อยู่และรับกุญแจสาธารณะของ Bob (A, B) 2. อลิซสร้างสุ่ม \(r \in [1, l - 1]\) และคำนวณคีย์สาธารณะแบบครั้งเดียว \(P = H_s(rA)G +\) บี. 3. อลิซใช้ P เป็นคีย์ปลายทางสำหรับเอาต์พุตและยังแพ็คค่า R = rG (เป็นส่วนหนึ่ง ของการแลกเปลี่ยน Diffie-Hellman) ในการทำธุรกรรม โปรดทราบว่าเธอสามารถสร้างได้ เอาต์พุตอื่นๆ ที่มีคีย์สาธารณะเฉพาะ: คีย์ของผู้รับที่แตกต่างกัน (Ai, Bi) บ่งบอกถึง Pi ที่แตกต่างกัน แม้จะมี r เดียวกันก็ตาม การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง อาร์ = อาร์จี P = Hs(rA)G + B ผู้รับ กุญแจสาธารณะ ข้อมูลสุ่มของผู้ส่ง ร (ก, ข) รูปที่ 4 โครงสร้างธุรกรรมมาตรฐาน 4. อลิซส่งธุรกรรม 5. Bob ตรวจสอบทุกธุรกรรมที่ส่งผ่านด้วยรหัสส่วนตัวของเขา (a, b) และคำนวณ P ′= Hs(aR)G + B. หากธุรกรรมของอลิซกับบ๊อบเป็นผู้รับอยู่ในหมู่พวกเขา จากนั้น aR = arG = rA และ P ′ = P 7 สาธารณะ ส่วนตัว อลิซ แครอล คีย์ครั้งเดียว คีย์ครั้งเดียว คีย์ครั้งเดียว บ๊อบ กุญแจของบ๊อบ ที่อยู่ของบ๊อบ รูปที่ 3 คีย์ CryptoNote/โมเดลธุรกรรม ขั้นแรก ผู้ส่งทำการแลกเปลี่ยน Diffie-Hellman เพื่อรับความลับที่แบ่งปันจากข้อมูลของเขาและ ครึ่งหนึ่งของที่อยู่ผู้รับ จากนั้นเขาจะคำนวณคีย์ปลายทางแบบครั้งเดียวโดยใช้การแชร์ ความลับและที่อยู่ครึ่งหลัง ผู้รับต้องใช้คีย์ ec ที่แตกต่างกันสองชุด สำหรับสองขั้นตอนนี้ ดังนั้นที่อยู่ CryptoNote มาตรฐานจึงมีขนาดใหญ่เป็นเกือบสองเท่าของกระเป๋าเงิน Bitcoin ที่อยู่ ผู้รับยังทำการแลกเปลี่ยน Diffie-Hellman เพื่อกู้คืนสิ่งที่เกี่ยวข้องด้วย รหัสลับ ลำดับธุรกรรมมาตรฐานจะเป็นดังนี้: 1. อลิซต้องการส่งการชำระเงินให้กับ Bob ซึ่งได้เผยแพร่ที่อยู่มาตรฐานของเขาแล้ว เธอ แกะที่อยู่และรับกุญแจสาธารณะของ Bob (A, B) 2. อลิซสร้างสุ่ม \(r \in [1, l - 1]\) และคำนวณคีย์สาธารณะแบบครั้งเดียว \(P = H_s(rA)G +\) บี. 3. อลิซใช้ P เป็นคีย์ปลายทางสำหรับเอาต์พุตและยังแพ็คค่า R = rG (เป็นส่วนหนึ่ง ของการแลกเปลี่ยน Diffie-Hellman) ในการทำธุรกรรม โปรดทราบว่าเธอสามารถสร้างได้ เอาต์พุตอื่นๆ ที่มีคีย์สาธารณะเฉพาะ: คีย์ของผู้รับที่แตกต่างกัน (Ai, Bi) บ่งบอกถึง Pi ที่แตกต่างกัน แม้จะมี r เดียวกันก็ตาม การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง อาร์ = อาร์จี P = Hs(rA)G + B ผู้รับ กุญแจสาธารณะ ข้อมูลสุ่มของผู้ส่ง ร (ก, ข) รูปที่ 4 โครงสร้างธุรกรรมมาตรฐาน 4. อลิซส่งธุรกรรม 5. Bob ตรวจสอบทุกธุรกรรมที่ส่งผ่านด้วยรหัสส่วนตัวของเขา (a, b) และคำนวณ P ′= Hs(aR)G + B. หากธุรกรรมของอลิซกับบ๊อบเป็นผู้รับอยู่ในหมู่พวกเขา จากนั้น aR = arG = rA และ P ′ = P 7 13 ฉันสงสัยว่ามันจะปวดคอขนาดไหนหากใช้ ทางเลือก ของการเข้ารหัส โครงการ รูปไข่หรืออย่างอื่น ดังนั้นหากแผนการบางอย่างพังในอนาคต สกุลเงินจะเปลี่ยนไป โดยไม่ต้องกังวล คงจะปวดก้นมาก โอเค นี่คือสิ่งที่ฉันเพิ่งอธิบายไปในความคิดเห็นก่อนหน้า ประเภท Diffie-Hellman การแลกเปลี่ยนเป็นระเบียบเรียบร้อย สมมติว่าอเล็กซ์และเบรนดาต่างมีหมายเลขลับ A และ B และตัวเลข พวกเขาไม่สนใจที่จะเก็บความลับ ก และ ข พวกเขาต้องการสร้างความลับร่วมกันโดยปราศจาก เอวาค้นพบมัน Diffie และ Hellman คิดหาวิธีให้ Alex และ Brenda ร่วมกัน หมายเลขสาธารณะ a และ b แต่ไม่ใช่หมายเลขส่วนตัว A และ B และสร้างความลับร่วมกัน K. การใช้ความลับร่วมกันนี้ K โดยที่ Eva ไม่รับฟังในการสร้างสิ่งเดียวกัน K, Alex และ Brenda สามารถใช้ K เป็นคีย์เข้ารหัสลับและส่งข้อความลับกลับไปได้แล้ว และออกไป นี่คือวิธีการ CAN ทำงาน แม้ว่าควรจะทำงานกับตัวเลขที่มากกว่า 100 มากก็ตาม เราจะใช้ 100 เพราะการทำงานกับจำนวนเต็มแบบโมดูโล 100 เทียบเท่ากับ "การละทิ้งทั้งหมด แต่เป็นเลขสองหลักสุดท้าย" อเล็กซ์และเบรนดาต่างก็เลือก A, a, B และ b พวกเขาเก็บความลับ A และ B อเล็กซ์บอกเบรนดาว่าเธอมีค่าเป็นโมดูโล 100 (แค่เลขสองหลักสุดท้าย) และเบรนดาบอกอเล็กซ์ ค่าของเธอของ b โมดูโล 100 ตอนนี้เอวารู้ (a,b) โมดูโล 100 แต่อเล็กซ์รู้ (a,b,A) ดังนั้นเธอ สามารถคำนวณ x=abA แบบโมดูโล 100อเล็กซ์สับทั้งหมดยกเว้นเลขสุดท้ายเพราะเรากำลังดำเนินการอยู่ ภายใต้จำนวนเต็มโมดูโล 100 อีกครั้ง ในทำนองเดียวกัน เบรนดารู้ (a,b,B) ดังนั้นเธอจึงสามารถคำนวณได้ y=abB โมดูโล 100 ตอนนี้ Alex สามารถเผยแพร่ x และ Brenda สามารถเผยแพร่ y ได้ แต่ตอนนี้อเล็กซ์สามารถคำนวณ yA = abBA แบบโมดูโล 100 ได้ และเบรนดาสามารถคำนวณ xB ได้ = abBA โมดูโล 100 พวกเขาทั้งสองรู้หมายเลขเดียวกัน! แต่ทั้งหมดที่เอวาได้ยินก็คือ (ก,ข,กขก,กขข) เธอไม่มีวิธีง่ายๆ ในการคำนวณ abA*B ตอนนี้ นี่เป็นวิธีคิดที่ง่ายและปลอดภัยน้อยที่สุดเกี่ยวกับการแลกเปลี่ยน Diffie-Hellman มีเวอร์ชันที่ปลอดภัยมากขึ้น แต่เวอร์ชันส่วนใหญ่ใช้งานได้เพราะการแยกตัวประกอบจำนวนเต็มและไม่ต่อเนื่อง ลอการิทึมเป็นเรื่องยาก และปัญหาทั้งสองนั้นแก้ไขได้อย่างง่ายดายด้วยคอมพิวเตอร์ควอนตัม ฉันจะดูว่ามีเวอร์ชันใดบ้างที่ทนทานต่อควอนตัม http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange "ลำดับ txn มาตรฐาน" ที่แสดงไว้ที่นี่ขาดขั้นตอนมากมาย เช่น SIGNATURES พวกเขาเพิ่งได้รับที่นี่ ซึ่งแย่มากจริงๆเพราะลำดับที่เรา ลงนาม ข้อมูลที่รวมอยู่ในข้อความที่ลงนาม และอื่นๆ... ทั้งหมดนี้สุดยอดมาก มีความสำคัญต่อโปรโตคอล ทำผิดขั้นตอนหนึ่งหรือสองขั้นตอน แม้จะผิดลำดับเล็กน้อยก็ตาม ในขณะที่ใช้ "the ลำดับธุรกรรมมาตรฐาน" อาจทำให้ความปลอดภัยของทั้งระบบเกิดความสงสัยได้ นอกจากนี้ หลักฐานที่นำเสนอในภายหลังในรายงานอาจไม่เข้มงวดเพียงพอหาก กรอบการทำงานภายใต้คำจำกัดความที่กำหนดไว้อย่างหลวมๆ ดังในส่วนนี้
สาธารณะ ส่วนตัว อลิซ แครอล คีย์ครั้งเดียว คีย์ครั้งเดียว คีย์ครั้งเดียว บ๊อบ กุญแจของบ๊อบ ที่อยู่ของบ๊อบ รูปที่ 3 คีย์ CryptoNote/โมเดลธุรกรรม ขั้นแรก ผู้ส่งทำการแลกเปลี่ยน Diffie-Hellman เพื่อรับความลับที่แบ่งปันจากข้อมูลของเขาและ ครึ่งหนึ่งของที่อยู่ผู้รับ จากนั้นเขาจะคำนวณคีย์ปลายทางแบบครั้งเดียวโดยใช้การแชร์ ความลับและที่อยู่ครึ่งหลัง ผู้รับต้องใช้คีย์ ec ที่แตกต่างกันสองชุด สำหรับสองขั้นตอนนี้ ดังนั้นที่อยู่ CryptoNote มาตรฐานจึงมีขนาดใหญ่เกือบสองเท่าของกระเป๋าเงิน Bitcoin ที่อยู่ ผู้รับยังทำการแลกเปลี่ยน Diffie-Hellman เพื่อกู้คืนสิ่งที่เกี่ยวข้องด้วย รหัสลับ ลำดับธุรกรรมมาตรฐานจะเป็นดังนี้: 1. อลิซต้องการส่งการชำระเงินให้กับ Bob ซึ่งได้เผยแพร่ที่อยู่มาตรฐานของเขาแล้ว เธอ แกะที่อยู่และรับกุญแจสาธารณะของ Bob (A, B) 2. อลิซสร้างสุ่ม \(r \in [1, l - 1]\) และคำนวณคีย์สาธารณะแบบครั้งเดียว \(P = H_s(rA)G +\) บี. 3. อลิซใช้ P เป็นคีย์ปลายทางสำหรับเอาต์พุตและยังแพ็คค่า R = rG (เป็นส่วนหนึ่ง ของการแลกเปลี่ยน Diffie-Hellman) ในการทำธุรกรรม โปรดทราบว่าเธอสามารถสร้างได้ เอาต์พุตอื่นๆ ที่มีคีย์สาธารณะเฉพาะ: คีย์ของผู้รับที่แตกต่างกัน (Ai, Bi) บ่งบอกถึง Pi ที่แตกต่างกัน แม้จะมี r เดียวกันก็ตาม การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง อาร์ = อาร์จี P = Hs(rA)G + B ผู้รับ กุญแจสาธารณะ ข้อมูลสุ่มของผู้ส่ง ร (ก, ข) รูปที่ 4 โครงสร้างธุรกรรมมาตรฐาน 4. อลิซส่งธุรกรรม 5. Bob ตรวจสอบทุกธุรกรรมที่ส่งผ่านด้วยรหัสส่วนตัวของเขา (a, b) และคำนวณ P ′= Hs(aR)G + B. หากธุรกรรมของอลิซกับบ๊อบเป็นผู้รับอยู่ในหมู่พวกเขา จากนั้น aR = arG = rA และ P ′ = P 7 สาธารณะ ส่วนตัว อลิซ แครอล คีย์ครั้งเดียว คีย์ครั้งเดียว คีย์ครั้งเดียว บ๊อบ กุญแจของบ๊อบ ที่อยู่ของบ๊อบ รูปที่ 3 คีย์ CryptoNote/โมเดลธุรกรรม ขั้นแรก ผู้ส่งทำการแลกเปลี่ยน Diffie-Hellman เพื่อรับความลับที่แบ่งปันจากข้อมูลของเขาและ ครึ่งหนึ่งของที่อยู่ผู้รับ จากนั้นเขาจะคำนวณคีย์ปลายทางแบบครั้งเดียวโดยใช้การแชร์ ความลับและที่อยู่ครึ่งหลัง ผู้รับต้องใช้คีย์ ec ที่แตกต่างกันสองชุด สำหรับสองขั้นตอนนี้ ดังนั้นที่อยู่ CryptoNote มาตรฐานจึงมีขนาดใหญ่เป็นเกือบสองเท่าของกระเป๋าเงิน Bitcoin ที่อยู่ ผู้รับยังทำการแลกเปลี่ยน Diffie-Hellman เพื่อกู้คืนสิ่งที่เกี่ยวข้องด้วย รหัสลับ ลำดับธุรกรรมมาตรฐานจะเป็นดังนี้: 1. อลิซต้องการส่งการชำระเงินให้กับ Bob ซึ่งได้เผยแพร่ที่อยู่มาตรฐานของเขาแล้ว เธอ แกะที่อยู่และรับกุญแจสาธารณะของ Bob (A, B) 2. อลิซสร้างสุ่ม \(r \in [1, l - 1]\) และคำนวณคีย์สาธารณะแบบครั้งเดียว \(P = H_s(rA)G +\) บี. 3. อลิซใช้ P เป็นคีย์ปลายทางสำหรับเอาต์พุตและยังแพ็คค่า R = rG (เป็นส่วนหนึ่ง ของการแลกเปลี่ยน Diffie-Hellman) ในการทำธุรกรรม โปรดทราบว่าเธอสามารถสร้างได้ เอาต์พุตอื่นๆ ที่มีคีย์สาธารณะเฉพาะ: คีย์ของผู้รับที่แตกต่างกัน (Ai, Bi) บ่งบอกถึง Pi ที่แตกต่างกัน แม้จะมี r เดียวกันก็ตาม การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง อาร์ = อาร์จี P = Hs(rA)G + B ผู้รับ กุญแจสาธารณะ ข้อมูลสุ่มของผู้ส่ง ร (ก, ข) รูปที่ 4 โครงสร้างธุรกรรมมาตรฐาน 4. อลิซส่งธุรกรรม 5. Bob ตรวจสอบทุกธุรกรรมที่ส่งผ่านด้วยรหัสส่วนตัวของเขา (a, b) และคำนวณ P ′= Hs(aR)G + B. หากธุรกรรมของอลิซกับบ๊อบเป็นผู้รับอยู่ในหมู่พวกเขา จากนั้น aR = arG = rA และ P ′ = P 7 14 โปรดทราบว่าผู้เขียนทำหน้าที่ได้แย่มากในการรักษาคำศัพท์ให้ตรงตลอด ข้อความ แต่โดยเฉพาะในส่วนถัดไปนี้ การจุติครั้งต่อไปของบทความนี้จะต้องเป็น เข้มงวดมากขึ้น ในข้อความพวกเขาอ้างถึง P เป็นกุญแจสาธารณะแบบใช้ครั้งเดียว ในแผนภาพจะเรียก R ว่า "คีย์สาธารณะ Tx" และ P เป็น "คีย์ปลายทาง" ถ้าฉันจะเขียนเรื่องนี้ใหม่ฉันจะ กำหนดคำศัพท์เฉพาะเจาะจงก่อนที่จะพูดคุยในส่วนเหล่านี้ เอลนี้มีขนาดใหญ่มาก ดูหน้า 5. ใครเลือกเอลล์? แผนภาพแสดงให้เห็นว่าคีย์สาธารณะของธุรกรรม R = rG ซึ่งเป็นแบบสุ่มและเลือก โดยผู้ส่งไม่ได้เป็นส่วนหนึ่งของเอาต์พุต Tx เนื่องจากอาจเหมือนกันสำหรับหลายรายการ ทำธุรกรรมกับหลาย ๆ คน และไม่ได้ใช้ ภายหลัง เพื่อใช้จ่าย R ใหม่ถูกสร้างขึ้น ทุกครั้งที่คุณต้องการออกอากาศธุรกรรม CryptoNote ใหม่ นอกจากนี้ R จะใช้เท่านั้น เพื่อตรวจสอบว่าคุณเป็นผู้รับรายการหรือไม่ ไม่ใช่ข้อมูลขยะ แต่เป็นขยะสำหรับทุกคน โดยไม่มีคีย์ส่วนตัวที่เกี่ยวข้องกับ (A,B) ในทางกลับกัน คีย์ปลายทาง P = Hs(rA)G + B เป็นส่วนหนึ่งของเอาต์พุต Tx ทุกคน การเจาะข้อมูลของธุรกรรมที่ส่งผ่านทุกครั้งจะต้องตรวจสอบ P* ที่สร้างขึ้นเอง P นี้เพื่อดูว่าพวกเขาเป็นเจ้าของธุรกรรมที่ส่งผ่านนี้หรือไม่ ทุกคนที่มีเอาท์พุตธุรกรรมที่ยังไม่ได้ใช้ (UTXO) จะมี Ps เหล่านี้จำนวนหนึ่งวางอยู่รอบๆ ด้วยจำนวน เพื่อที่จะใช้จ่ายง พวกเขา ลงนามข้อความใหม่รวมทั้ง P. อลิซจะต้องลงนามในธุรกรรมนี้ด้วยคีย์ส่วนตัวแบบครั้งเดียวที่เกี่ยวข้องกับคีย์ปลายทางของเอาต์พุตธุรกรรมที่ยังไม่ได้ใช้ กุญแจปลายทางแต่ละอันที่อลิซเป็นเจ้าของมาพร้อมกับอุปกรณ์ครบครัน ด้วยรหัสส่วนตัวแบบครั้งเดียวที่อลิซเป็นเจ้าของ (สมมุติ) ทุกครั้งที่อลิซต้องการ ส่งเนื้อหาของรหัสปลายทางมาให้ฉัน หรือ Bob หรือ Brenda หรือ Charlie หรือ Charlene เธอ ใช้คีย์ส่วนตัวของเธอเพื่อลงนามในธุรกรรม เมื่อได้รับธุรกรรมแล้ว ฉันจะได้รับรายการใหม่ รหัสสาธารณะ Tx ซึ่งเป็นรหัสสาธารณะปลายทางใหม่ และฉันจะสามารถกู้คืนรหัสส่วนตัวแบบครั้งเดียวใหม่ได้ x การรวมคีย์ส่วนตัวแบบครั้งเดียวของฉัน x กับปลายทางสาธารณะของธุรกรรมใหม่ คีย์คือวิธีที่เราส่งธุรกรรมใหม่
- Bob สามารถกู้คืนคีย์ส่วนตัวแบบครั้งเดียวที่เกี่ยวข้องได้: x = Hs(aR) + b ดังนั้น P = xG เขาสามารถใช้เอาต์พุตนี้ได้ตลอดเวลาโดยการลงนามในธุรกรรมกับ x การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง P ′ = Hs(aR)G + bG กุญแจสาธารณะแบบครั้งเดียว x = Hs(aR) + b รหัสส่วนตัวแบบครั้งเดียว ผู้รับ รหัสส่วนตัว (ก ข) ร พี' ?= ป มะเดื่อ 5. การตรวจสอบธุรกรรมขาเข้า ผลก็คือ Bob ได้รับการชำระเงินเข้ามา ซึ่งเกี่ยวข้องกับกุญแจสาธารณะแบบครั้งเดียวซึ่งก็คือ ไม่สามารถเชื่อมโยงได้สำหรับผู้ชม หมายเหตุเพิ่มเติมบางประการ: • เมื่อ Bob “รับรู้” ธุรกรรมของเขา (ดูขั้นตอนที่ 5) เขาใช้จริงเพียงครึ่งหนึ่งของธุรกรรมของเขา ข้อมูลส่วนตัว: (ก, ข) คู่นี้หรือที่เรียกว่าคีย์ติดตามสามารถส่งผ่านได้ ไปยังบุคคลที่สาม (แครอล) Bob สามารถมอบหมายให้เธอดำเนินการธุรกรรมใหม่ได้ บ๊อบ ไม่จำเป็นต้องเชื่อถือแครอลอย่างชัดเจน เพราะเธอไม่สามารถกู้คืนคีย์ลับแบบครั้งเดียว p ได้ โดยไม่มีคีย์ส่วนตัวแบบเต็มของ Bob (a, b) วิธีการนี้มีประโยชน์เมื่อ Bob ขาดแบนด์วิดท์ หรือพลังการคำนวณ (สมาร์ทโฟน กระเป๋าฮาร์ดแวร์ ฯลฯ) • ในกรณีที่อลิซต้องการพิสูจน์ว่าเธอส่งธุรกรรมไปยังที่อยู่ของ Bob เธอสามารถเปิดเผยได้ หรือใช้วิธีปฏิบัติแบบไม่มีความรู้ใดๆ เพื่อพิสูจน์ว่าเธอรู้ (เช่น โดยการลงนาม การทำธุรกรรมกับ r) • หาก Bob ต้องการมีที่อยู่ที่รองรับการตรวจสอบซึ่งมีธุรกรรมขาเข้าทั้งหมด สามารถลิงก์ได้ เขาสามารถเผยแพร่คีย์ติดตามหรือใช้ที่อยู่ที่ถูกตัดทอนได้ ที่อยู่นั้น เป็นตัวแทน ec-key สาธารณะ B เพียงอันเดียว และส่วนที่เหลือตามที่โปรโตคอลต้องการคือ ได้มาดังนี้: a = Hs(B) และ A = Hs(B)G ในทั้งสองกรณีทุกคนเป็น สามารถ "รับรู้" ธุรกรรมขาเข้าทั้งหมดของ Bob ได้ แต่แน่นอนว่าไม่มีใครสามารถใช้จ่ายได้ เงินทุนที่อยู่ในนั้นโดยไม่มีรหัสลับ b. 4.4 ลายเซ็นแหวนแบบครั้งเดียว โปรโตคอลที่ใช้ลายเซ็นวงแหวนแบบครั้งเดียวช่วยให้ผู้ใช้สามารถยกเลิกการเชื่อมโยงได้โดยไม่มีเงื่อนไข น่าเสียดายที่ลายเซ็นเข้ารหัสประเภททั่วไปอนุญาตให้ติดตามธุรกรรมไปยังพวกเขาได้ ผู้ส่งและผู้รับตามลำดับ วิธีแก้ปัญหาข้อบกพร่องนี้อยู่ที่การใช้ลายเซ็นที่แตกต่างกัน มากกว่าที่ใช้ในระบบเงินสดอิเล็กทรอนิกส์ในปัจจุบัน ก่อนอื่นเราจะให้คำอธิบายทั่วไปของอัลกอริทึมของเราโดยไม่มีการอ้างอิงที่ชัดเจน เงินสดอิเล็กทรอนิกส์ ลายเซ็นกริ่งแบบครั้งเดียวประกอบด้วยสี่อัลกอริธึม: (GEN, SIG, VER, LNK): GEN: รับพารามิเตอร์สาธารณะและส่งออก ec-pair (P, x) และคีย์สาธารณะ I SIG: รับข้อความ m, ชุด \(S'\) ของกุญแจสาธารณะ {Pi}i̸=s, คู่ (Ps, xs) และส่งออกลายเซ็น \(\sigma\) และเซต \(S = \)S'\( \cup \{P_s\}\) 8
-
Bob สามารถกู้คืนคีย์ส่วนตัวแบบครั้งเดียวที่เกี่ยวข้องได้: x = Hs(aR) + b ดังนั้น P = xG เขาสามารถใช้เอาต์พุตนี้ได้ตลอดเวลาโดยการลงนามในธุรกรรมกับ x การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง P ′ = Hs(aR)G + bG กุญแจสาธารณะแบบครั้งเดียว x = Hs(aR) + b รหัสส่วนตัวแบบครั้งเดียว ผู้รับ รหัสส่วนตัว (ก ข) ร พี' ?= ป มะเดื่อ 5. การตรวจสอบธุรกรรมขาเข้า ผลก็คือ Bob ได้รับการชำระเงินเข้ามา ซึ่งเกี่ยวข้องกับกุญแจสาธารณะแบบครั้งเดียวซึ่งได้แก่ ไม่สามารถเชื่อมโยงได้สำหรับผู้ชม หมายเหตุเพิ่มเติมบางประการ: • เมื่อ Bob “รับรู้” ธุรกรรมของเขา (ดูขั้นตอนที่ 5) เขาใช้จริงเพียงครึ่งหนึ่งของธุรกรรมของเขา ข้อมูลส่วนตัว: (ก, ข) คู่นี้หรือที่เรียกว่าคีย์ติดตามสามารถส่งผ่านได้ ไปยังบุคคลที่สาม (แครอล) Bob สามารถมอบหมายให้เธอดำเนินการธุรกรรมใหม่ได้ บ๊อบ ไม่จำเป็นต้องเชื่อถือแครอลอย่างชัดเจน เพราะเธอไม่สามารถกู้คืนคีย์ลับแบบครั้งเดียว p ได้ โดยไม่มีคีย์ส่วนตัวแบบเต็มของ Bob (a, b) วิธีการนี้มีประโยชน์เมื่อ Bob ขาดแบนด์วิดท์ หรือพลังการคำนวณ (สมาร์ทโฟน กระเป๋าฮาร์ดแวร์ ฯลฯ) • ในกรณีที่อลิซต้องการพิสูจน์ว่าเธอส่งธุรกรรมไปยังที่อยู่ของ Bob เธอสามารถเปิดเผยได้ หรือใช้วิธีปฏิบัติแบบไม่มีความรู้ใดๆ เพื่อพิสูจน์ว่าเธอรู้ (เช่น โดยการลงนาม การทำธุรกรรมกับ r) • หาก Bob ต้องการมีที่อยู่ที่รองรับการตรวจสอบซึ่งมีธุรกรรมขาเข้าทั้งหมด สามารถลิงก์ได้ เขาสามารถเผยแพร่คีย์ติดตามหรือใช้ที่อยู่ที่ถูกตัดทอนได้ ที่อยู่นั้น เป็นตัวแทน ec-key สาธารณะ B เพียงอันเดียว และส่วนที่เหลือตามที่โปรโตคอลต้องการคือ ได้มาดังนี้: a = Hs(B) และ A = Hs(B)G ในทั้งสองกรณีทุกคนเป็น สามารถ "รับรู้" ธุรกรรมขาเข้าทั้งหมดของ Bob ได้ แต่แน่นอนว่าไม่มีใครสามารถใช้จ่ายได้ เงินทุนที่อยู่ในนั้นโดยไม่มีรหัสลับ b. 4.4 ลายเซ็นแหวนแบบครั้งเดียว โปรโตคอลที่ใช้ลายเซ็นวงแหวนแบบครั้งเดียวช่วยให้ผู้ใช้สามารถยกเลิกการเชื่อมโยงได้โดยไม่มีเงื่อนไข น่าเสียดายที่ลายเซ็นเข้ารหัสประเภททั่วไปอนุญาตให้ติดตามธุรกรรมไปยังพวกเขาได้ ผู้ส่งและผู้รับตามลำดับ วิธีแก้ปัญหาข้อบกพร่องนี้อยู่ที่การใช้ลายเซ็นที่แตกต่างกัน มากกว่าที่ใช้ในระบบเงินสดอิเล็กทรอนิกส์ในปัจจุบัน ก่อนอื่นเราจะจัดให้มีรุ่นคำอธิบายอัลกอริธึมของเราโดยไม่มีการอ้างอิงที่ชัดเจน เงินสดอิเล็กทรอนิกส์ ลายเซ็นกริ่งแบบครั้งเดียวประกอบด้วยสี่อัลกอริธึม: (GEN, SIG, VER, LNK): GEN: รับพารามิเตอร์สาธารณะและส่งออก ec-pair (P, x) และคีย์สาธารณะ I SIG: รับข้อความ m, ชุด \(S'\) ของกุญแจสาธารณะ {Pi}i̸=s, คู่ (Ps, xs) และส่งออกลายเซ็น \(\sigma\) และเซต \(S = \)S'\( \cup \{P_s\}\) 8 15 ผลลัพธ์ของธุรกรรมที่ยังไม่ได้ใช้มีลักษณะเป็นอย่างไรที่นี่ แผนภาพแสดงให้เห็นว่าเอาท์พุตธุรกรรมประกอบด้วยจุดข้อมูลเพียงสองจุดเท่านั้น ได้แก่ จำนวนเงินและคีย์ปลายทาง แต่นี่ไม่ใช่ เพียงพอเพราะเมื่อฉันพยายามใช้ "เอาต์พุต" นี้ ฉันยังคงจำเป็นต้องรู้ R=rG โปรดจำไว้ว่า r ถูกเลือกโดยผู้ส่ง และ R คือ a) ใช้เพื่อจดจำ cryptonotes ที่เข้ามาเป็นของคุณ เป็นเจ้าของและ b) ใช้เพื่อสร้างคีย์ส่วนตัวแบบครั้งเดียวที่ใช้เพื่อ "อ้างสิทธิ์" cryptonote ของคุณ ส่วนเกี่ยวกับเรื่องนี้ที่ฉันไม่เข้าใจ? ตามทฤษฎี "เอาล่ะ เรามีสิ่งเหล่านี้ ลายเซ็นและธุรกรรม แล้วเราจะส่งต่อกลับไปกลับมา" สู่โลกแห่งการเขียนโปรแกรม "โอเค ข้อมูลอะไร โดยเฉพาะ ที่ประกอบขึ้นเป็นรายบุคคล UTXO?" วิธีที่ดีที่สุดในการตอบคำถามนั้นคือการเจาะลึกเข้าไปในเนื้อความของโค้ดที่ไม่มีเครื่องหมายข้อคิดเห็นทั้งหมด เยี่ยมไปเลยทีม bytecoin จำได้ว่า: ความสามารถในการเชื่อมโยงหมายถึง "คนคนเดียวกันส่งหรือเปล่า" และไม่สามารถเชื่อมโยงได้หมายความว่า "ทำเช่นเดียวกัน คนรับ?". ดังนั้นระบบจึงสามารถเชื่อมโยงได้หรือไม่สามารถเชื่อมโยงได้ ไม่สามารถเชื่อมโยงได้หรือไม่สามารถเชื่อมโยงได้ น่ารำคาญฉันรู้ ดังนั้น เมื่อ Nic van Saberhagen พูดว่า "...การชำระเงินที่เข้ามา [จะ] เชื่อมโยงกับแบบครั้งเดียว กุญแจสาธารณะซึ่งผู้ชมไม่สามารถเชื่อมโยงได้" มาดูกันว่าเขาหมายถึงอะไร ขั้นแรก ให้พิจารณาสถานการณ์ที่ Alice ส่งธุรกรรมสองรายการแยกจากรายการเดียวกันให้ Bob ที่อยู่ไปยังที่อยู่เดียวกัน ในจักรวาล Bitcoin อลิซได้ทำผิดพลาดไปแล้ว ของการส่งจากที่อยู่เดียวกันดังนั้นการทำธุรกรรมจึงล้มเหลวในความต้องการของเรา ความสามารถในการเชื่อมโยง นอกจากนี้ เนื่องจากเธอส่งเงินไปยังที่อยู่เดียวกัน เธอจึงล้มเหลวตามความปรารถนาของเรา สำหรับการไม่สามารถเชื่อมโยงได้ ธุรกรรม bitcoin นี้สามารถเชื่อมโยงได้ (ทั้งหมด) และไม่สามารถเชื่อมโยงได้ ในทางกลับกัน ในจักรวาล cryptonote สมมติว่า Alice ส่ง cryptonote ให้กับ Bob โดยใช้ที่อยู่สาธารณะของ Bob เธอเลือกเป็นชุดกุญแจสาธารณะที่น่าสับสนซึ่งทุกคนรู้จัก กุญแจในพื้นที่รถไฟใต้ดินวอชิงตัน ดี.ซี. อเล็กซ์สร้างรหัสสาธารณะแบบใช้ครั้งเดียวโดยใช้ของเธอเอง ข้อมูลและข้อมูลสาธารณะของ Bob เธอส่งเงินไป และผู้สังเกตการณ์คนใดก็จะส่งเงินไป เท่านั้นที่สามารถรวบรวมได้ "มีคนจากพื้นที่รถไฟใต้ดินวอชิงตัน ดี.ซี. ส่ง cryptonotes 2.3 รายการไปให้ ที่อยู่สาธารณะแบบครั้งเดียว XYZ123" เรามีการควบคุมความน่าจะเป็นสำหรับการเชื่อมโยงได้ที่นี่ ดังนั้นเราจะเรียกสิ่งนี้ว่า "เกือบจะไม่สามารถเชื่อมโยงได้" นอกจากนี้เรายังเห็นเฉพาะเงินคีย์สาธารณะที่ถูกส่งไปเท่านั้น แม้ว่าเราจะสงสัยว่าผู้รับ คือบ็อบ เราไม่มีคีย์ส่วนตัวของเขา ดังนั้นเราจึงไม่สามารถทดสอบได้ว่ามีธุรกรรมที่ผ่านหรือไม่ เป็นของ Bob ไม่ต้องพูดถึงการสร้างคีย์ส่วนตัวเพียงครั้งเดียวเพื่อแลก cryptonote ของเขา ดังนั้นนี้ ที่จริงแล้วคือ "ไม่สามารถเชื่อมโยงได้" โดยสิ้นเชิง นี่เป็นเคล็ดลับที่ประณีตที่สุด ใครอยากจะเชื่อถือ MtGox อื่นจริงๆ? เราอาจจะ จัดเก็บ BTC จำนวนหนึ่งบน Coinbase ได้อย่างสะดวกสบาย แต่ความปลอดภัยขั้นสูงสุดของ Bitcoin ก็คือ กระเป๋าเงินจริง ซึ่งไม่สะดวก. ในกรณีนี้ คุณสามารถมอบคีย์ส่วนตัวของคุณครึ่งหนึ่งได้อย่างไม่ไว้วางใจโดยไม่กระทบต่อคุณ ความสามารถในการใช้จ่ายเงินของตัวเอง เมื่อทำเช่นนี้ สิ่งที่คุณทำคือบอกใครสักคนถึงวิธีทำลายการเชื่อมต่อไม่ได้ ส่วนอื่นๆ คุณสมบัติของ CN ที่ทำหน้าที่เหมือนสกุลเงินจะถูกรักษาไว้ เช่น การพิสูจน์การใช้จ่ายซ้ำซ้อน และ อะไรก็ตาม
-
Bob สามารถกู้คืนคีย์ส่วนตัวแบบครั้งเดียวที่เกี่ยวข้องได้: x = Hs(aR) + b ดังนั้น P = xG เขาสามารถใช้เอาต์พุตนี้ได้ตลอดเวลาโดยการลงนามในธุรกรรมกับ x การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง P ′ = Hs(aR)G + bG กุญแจสาธารณะแบบครั้งเดียว x = Hs(aR) + b รหัสส่วนตัวแบบครั้งเดียว ผู้รับ รหัสส่วนตัว (ก ข) ร พี' ?= ป มะเดื่อ 5. การตรวจสอบธุรกรรมขาเข้า ผลก็คือ Bob ได้รับการชำระเงินเข้ามา ซึ่งเกี่ยวข้องกับกุญแจสาธารณะแบบครั้งเดียวซึ่งก็คือ ไม่สามารถเชื่อมโยงได้สำหรับผู้ชม หมายเหตุเพิ่มเติมบางประการ: • เมื่อ Bob “รับรู้” ธุรกรรมของเขา (ดูขั้นตอนที่ 5) เขาใช้จริงเพียงครึ่งหนึ่งของธุรกรรมของเขา ข้อมูลส่วนตัว: (ก, ข) คู่นี้หรือที่เรียกว่าคีย์ติดตามสามารถส่งผ่านได้ ไปยังบุคคลที่สาม (แครอล) Bob สามารถมอบหมายให้เธอดำเนินการธุรกรรมใหม่ได้ บ๊อบ ไม่จำเป็นต้องเชื่อถือแครอลอย่างชัดเจน เพราะเธอไม่สามารถกู้คืนคีย์ลับแบบครั้งเดียว p ได้ โดยไม่มีคีย์ส่วนตัวแบบเต็มของ Bob (a, b) วิธีการนี้มีประโยชน์เมื่อ Bob ขาดแบนด์วิดท์ หรือพลังการคำนวณ (สมาร์ทโฟน กระเป๋าฮาร์ดแวร์ ฯลฯ) • ในกรณีที่อลิซต้องการพิสูจน์ว่าเธอส่งธุรกรรมไปยังที่อยู่ของ Bob เธอสามารถเปิดเผยได้ หรือใช้วิธีปฏิบัติแบบไม่มีความรู้ใดๆ เพื่อพิสูจน์ว่าเธอรู้ (เช่น โดยการลงนาม การทำธุรกรรมกับ r) • หาก Bob ต้องการมีที่อยู่ที่รองรับการตรวจสอบซึ่งมีธุรกรรมขาเข้าทั้งหมด สามารถลิงก์ได้ เขาสามารถเผยแพร่คีย์ติดตามหรือใช้ที่อยู่ที่ถูกตัดทอนได้ ที่อยู่นั้น เป็นตัวแทน ec-key สาธารณะ B เพียงอันเดียว และส่วนที่เหลือตามที่โปรโตคอลต้องการคือ ได้มาดังนี้: a = Hs(B) และ A = Hs(B)G ในทั้งสองกรณีทุกคนเป็น สามารถ "รับรู้" ธุรกรรมขาเข้าทั้งหมดของ Bob ได้ แต่แน่นอนว่าไม่มีใครสามารถใช้จ่ายได้ เงินทุนที่อยู่ในนั้นโดยไม่มีรหัสลับ b. 4.4 ลายเซ็นแหวนแบบครั้งเดียว โปรโตคอลที่ใช้ลายเซ็นวงแหวนแบบครั้งเดียวช่วยให้ผู้ใช้สามารถยกเลิกการเชื่อมโยงได้โดยไม่มีเงื่อนไข น่าเสียดายที่ลายเซ็นเข้ารหัสประเภททั่วไปอนุญาตให้ติดตามธุรกรรมไปยังพวกเขาได้ ผู้ส่งและผู้รับตามลำดับ วิธีแก้ปัญหาข้อบกพร่องนี้อยู่ที่การใช้ลายเซ็นที่แตกต่างกัน มากกว่าที่ใช้ในระบบเงินสดอิเล็กทรอนิกส์ในปัจจุบัน ก่อนอื่นเราจะให้คำอธิบายทั่วไปของอัลกอริทึมของเราโดยไม่มีการอ้างอิงที่ชัดเจน เงินสดอิเล็กทรอนิกส์ ลายเซ็นกริ่งแบบครั้งเดียวประกอบด้วยสี่อัลกอริธึม: (GEN, SIG, VER, LNK): GEN: รับพารามิเตอร์สาธารณะและส่งออก ec-pair (P, x) และคีย์สาธารณะ I SIG: รับข้อความ m, ชุด \(S'\) ของกุญแจสาธารณะ {Pi}i̸=s, คู่ (Ps, xs) และส่งออกลายเซ็น \(\sigma\) และเซต \(S = \)S'\( \cup \{P_s\}\) 8
- Bob สามารถกู้คืนคีย์ส่วนตัวแบบครั้งเดียวที่เกี่ยวข้องได้: x = Hs(aR) + b ดังนั้น P = xG เขาสามารถใช้เอาต์พุตนี้ได้ตลอดเวลาโดยการลงนามในธุรกรรมกับ x การทำธุรกรรม รหัสสาธารณะ Tx เอาท์พุท TX จำนวน กุญแจปลายทาง P ′ = Hs(aR)G + bG กุญแจสาธารณะแบบครั้งเดียว x = Hs(aR) + b รหัสส่วนตัวแบบครั้งเดียว ผู้รับ รหัสส่วนตัว (ก ข) ร พี' ?= ป มะเดื่อ 5. การตรวจสอบธุรกรรมขาเข้า ผลก็คือ Bob ได้รับการชำระเงินเข้ามา ซึ่งเกี่ยวข้องกับกุญแจสาธารณะแบบครั้งเดียวซึ่งได้แก่ ไม่สามารถเชื่อมโยงได้สำหรับผู้ชม หมายเหตุเพิ่มเติมบางประการ: • เมื่อ Bob “รับรู้” ธุรกรรมของเขา (ดูขั้นตอนที่ 5) เขาใช้จริงเพียงครึ่งหนึ่งของธุรกรรมของเขา ข้อมูลส่วนตัว: (ก, ข) คู่นี้หรือที่เรียกว่าคีย์ติดตามสามารถส่งผ่านได้ ไปยังบุคคลที่สาม (แครอล) Bob สามารถมอบหมายให้เธอดำเนินการธุรกรรมใหม่ได้ บ๊อบ ไม่จำเป็นต้องเชื่อถือแครอลอย่างชัดเจน เพราะเธอไม่สามารถกู้คืนคีย์ลับแบบครั้งเดียว p ได้ โดยไม่มีคีย์ส่วนตัวแบบเต็มของ Bob (a, b) วิธีการนี้มีประโยชน์เมื่อ Bob ขาดแบนด์วิดท์ หรือพลังการคำนวณ (สมาร์ทโฟน กระเป๋าฮาร์ดแวร์ ฯลฯ) • ในกรณีที่อลิซต้องการพิสูจน์ว่าเธอส่งธุรกรรมไปยังที่อยู่ของ Bob เธอสามารถเปิดเผยได้ หรือใช้วิธีปฏิบัติแบบไม่มีความรู้ใดๆ เพื่อพิสูจน์ว่าเธอรู้ (เช่น โดยการลงนาม การทำธุรกรรมกับ r) • หาก Bob ต้องการมีที่อยู่ที่รองรับการตรวจสอบซึ่งมีธุรกรรมขาเข้าทั้งหมด สามารถลิงก์ได้ เขาสามารถเผยแพร่คีย์ติดตามหรือใช้ที่อยู่ที่ถูกตัดทอนได้ ที่อยู่นั้น เป็นตัวแทน ec-key สาธารณะ B เพียงอันเดียว และส่วนที่เหลือตามที่โปรโตคอลต้องการคือ ได้มาดังนี้: a = Hs(B) และ A = Hs(B)G ในทั้งสองกรณีทุกคนเป็น สามารถ "รับรู้" ธุรกรรมขาเข้าทั้งหมดของ Bob ได้ แต่แน่นอนว่าไม่มีใครสามารถใช้จ่ายได้ เงินทุนที่อยู่ในนั้นโดยไม่มีรหัสลับ b. 4.4 ลายเซ็นแหวนแบบครั้งเดียว โปรโตคอลที่ใช้ลายเซ็นวงแหวนแบบครั้งเดียวช่วยให้ผู้ใช้สามารถยกเลิกการเชื่อมโยงได้โดยไม่มีเงื่อนไข น่าเสียดายที่ลายเซ็นเข้ารหัสประเภททั่วไปอนุญาตให้ติดตามธุรกรรมไปยังพวกเขาได้ ผู้ส่งและผู้รับตามลำดับ วิธีแก้ปัญหาข้อบกพร่องนี้อยู่ที่การใช้ลายเซ็นที่แตกต่างกัน มากกว่าที่ใช้ในระบบเงินสดอิเล็กทรอนิกส์ในปัจจุบัน ก่อนอื่นเราจะจัดให้มีรุ่นคำอธิบายอัลกอริธึมของเราโดยไม่มีการอ้างอิงที่ชัดเจน เงินสดอิเล็กทรอนิกส์ ลายเซ็นกริ่งแบบครั้งเดียวประกอบด้วยสี่อัลกอริธึม: (GEN, SIG, VER, LNK): GEN: รับพารามิเตอร์สาธารณะและส่งออก ec-pair (P, x) และคีย์สาธารณะ I SIG: รับข้อความ m, ชุด \(S'\) ของกุญแจสาธารณะ {Pi}i̸=s, คู่ (Ps, xs) และส่งออกลายเซ็น \(\sigma\) และเซต \(S = \)S'\( \cup \{P_s\}\) 8 16 ใช่ ตอนนี้เรามี a) ที่อยู่การชำระเงิน และ b) รหัสการชำระเงิน นักวิจารณ์อาจถามว่า "เราจำเป็นต้องทำเช่นนี้จริงๆ หรือไม่ เพราะหากร้านค้าได้รับ 112.00678952 CN นั่นแหละ นั่นคือคำสั่งของฉัน และฉันมีภาพหน้าจอหรือใบเสร็จหรืออะไรก็ตาม ไม่ใช่อย่างนั้น ระดับความแม่นยำที่บ้าคลั่งเพียงพอ?” คำตอบคือ "บางที โดยส่วนใหญ่ ในแต่ละวัน การทำธุรกรรมแบบเห็นหน้ากัน" อย่างไรก็ตาม สถานการณ์ที่พบบ่อยกว่า (โดยเฉพาะในโลกดิจิทัล) คือ: พ่อค้าขายของ ชุดของวัตถุ แต่ละชิ้นมีราคาคงที่ สมมติว่าวัตถุ A คือ 0.001 CN, วัตถุ B คือ 0.01 CN และ วัตถุ C คือ 0.1 CN ตอนนี้หากพ่อค้าได้รับคำสั่งซื้อจำนวน 1.618 CN ก็มีจำนวนมากมาย (หลายวิธี!) ในการจัดเตรียมคำสั่งซื้อให้กับลูกค้า หากไม่มีรหัสการชำระเงิน การระบุคำสั่งซื้อที่เรียกว่า "ไม่ซ้ำกัน" ของลูกค้าด้วยต้นทุนที่เรียกว่า "ไม่ซ้ำกัน" ของลูกค้า คำสั่งกลายเป็นไปไม่ได้ ตลกยิ่งกว่า: ถ้าทุกอย่างในร้านค้าออนไลน์ของฉันมีราคา 1.0 พอดี CN และฉันได้รับลูกค้า 1,000 รายต่อวันเหรอ? และคุณต้องการพิสูจน์ว่าคุณซื้อวัตถุมา 3 ชิ้นพอดี สองสัปดาห์ก่อน? ไม่มีรหัสการชำระเงิน? ขอให้โชคดีนะเพื่อน เรื่องสั้นเรื่องยาว: เมื่อ Bob เผยแพร่ที่อยู่การชำระเงิน เขาอาจลงเอยด้วยการเผยแพร่ a รหัสการชำระเงินด้วย (ดู เช่น การฝากเงิน Poloniex XMR) สิ่งนี้แตกต่างไปจากที่อธิบายไว้ ในข้อความที่นี่ โดยที่ Alice เป็นคนสร้างรหัสการชำระเงิน Bob จะต้องมีวิธีสร้างรหัสการชำระเงินด้วยเช่นกัน (ก,ข) โปรดจำไว้ว่าสามารถเผยแพร่คีย์การติดตาม (a,B) ได้ สูญเสียความลับของคุณค่าของพินัยกรรม 'a' ไม่ละเมิดความสามารถในการจับจ่ายหรือยอมให้คนอื่นมาขโมยของ (ผมคิดว่า...ก็คงมี ได้รับการพิสูจน์แล้ว) จะช่วยให้ผู้ใช้สามารถดูธุรกรรมที่เข้ามาทั้งหมดได้ ที่อยู่ที่ถูกตัดทอนตามที่อธิบายไว้ในย่อหน้านี้ จะใช้ส่วน "ส่วนตัว" ของคีย์เท่านั้น และสร้างขึ้นจากส่วน "สาธารณะ" การเปิดเผยค่าสำหรับ 'a' จะลบความสามารถในการลิงก์ไม่ได้ แต่จะเก็บธุรกรรมที่เหลือไว้ ผู้เขียนหมายถึง "ไม่สามารถเชื่อมโยงได้" เพราะไม่สามารถเชื่อมโยงได้หมายถึงผู้รับและสามารถเชื่อมโยงได้ หมายถึงผู้ส่ง เห็นได้ชัดว่าผู้เขียนไม่ได้ตระหนักดีว่าการเชื่อมโยงได้มีแง่มุมที่แตกต่างกันสองประการ เนื่องจากท้ายที่สุดแล้ว ธุรกรรมเป็นวัตถุที่มีทิศทางบนกราฟ จึงมีคำถามสองข้อ: "ธุรกรรมทั้งสองนี้ไปที่บุคคลคนเดียวกันหรือไม่" และ "ธุรกรรมทั้งสองนี้กำลังจะมา จากคนคนเดียวกัน?” นี่เป็นนโยบาย "ไม่ย้อนกลับ" ซึ่งเป็นคุณสมบัติที่ไม่สามารถเชื่อมโยงได้ของ CryptoNote มีเงื่อนไข กล่าวคือ Bob สามารถเลือกธุรกรรมที่เข้ามาของเขาว่าไม่สามารถยกเลิกการเชื่อมโยงได้ การใช้นโยบายนี้ นี่คือการอ้างสิทธิ์ที่พวกเขาพิสูจน์ภายใต้ Random Oracle Model เราจะไปถึงจุดนั้น การสุ่ม ออราเคิลมีข้อดีและข้อเสีย
VER: รับข้อความ m, ชุด S, ลายเซ็น \(\sigma\) และเอาต์พุตเป็น "จริง" หรือ "เท็จ" LNK: รับชุด I = {Ii} ลายเซ็น \(\sigma\) และเอาต์พุต "เชื่อมโยง" หรือ "indep" แนวคิดเบื้องหลังโปรโตคอลนั้นค่อนข้างง่าย: ผู้ใช้สร้างลายเซ็นซึ่งสามารถเป็นได้ ตรวจสอบโดยชุดกุญแจสาธารณะแทนที่จะเป็นกุญแจสาธารณะเฉพาะ ตัวตนของผู้ลงนามคือ แยกไม่ออกจากผู้ใช้รายอื่นที่มีกุญแจสาธารณะอยู่ในชุดจนกว่าเจ้าของจะผลิต ลายเซ็นที่สองโดยใช้คู่กุญแจเดียวกัน คีย์ส่วนตัว x0 \(\cdots\) ซี \(\cdots\) xn กุญแจสาธารณะ ป0 \(\cdots\) พาย \(\cdots\) พีเอ็น แหวน ลายเซ็น ลงชื่อ ตรวจสอบ มะเดื่อ 6. การไม่เปิดเผยชื่อลายเซ็นของแหวน GEN: ผู้ลงนามเลือกคีย์ลับแบบสุ่ม \(x \in [1, l - 1]\) และคำนวณค่าที่สอดคล้องกัน กุญแจสาธารณะ P = xG นอกจากนี้เขายังคำนวณกุญแจสาธารณะอีกอัน I = xHp(P) ซึ่งเราจะทำ เรียกว่า “ภาพสำคัญ” SIG: ผู้ลงนามสร้างลายเซ็นวงแหวนแบบครั้งเดียวโดยมีความรู้เป็นศูนย์แบบไม่โต้ตอบ พิสูจน์โดยใช้เทคนิคจาก [21] เขาเลือกเซตย่อยแบบสุ่ม \(S'\) ของ n จากผู้ใช้รายอื่น คีย์สาธารณะ Pi, คู่คีย์ของเขาเอง (x, P) และคีย์อิมเมจ I ให้ \(0 \leq s \leq n\) เป็นดัชนีลับของผู้ลงนาม ใน S (เพื่อให้รหัสสาธารณะของเขาคือ Ps) เขาสุ่มเลือก {qi | ฉัน = 0 . . . n} และ {wi | ฉัน = 0 . . . n, i ̸= s} จาก (1 . . . l) และใช้ การเปลี่ยนแปลงต่อไปนี้: หลี่ = ( ชี่จี, ถ้าฉัน = ส คิวจี + วิปิ, ถ้าฉัน ̸= ส ริ= ( ฉีHp(Pi) ถ้าฉัน = ส qiHp(Pi) + wiI, ถ้าฉัน ̸= ส ขั้นตอนต่อไปคือการได้รับความท้าทายแบบไม่โต้ตอบ: c = Hs(ม, L1, . . . , Ln, R1, . . . , Rn) ในที่สุดผู้ลงนามจะคำนวณคำตอบ: ซี = วิ ถ้าฉัน ̸= ส ค - เอ็นพี ผม=0 ci ดัดแปลง ถ้าฉัน = ส ริ = ( ฉี ถ้าฉัน ̸= ส qs −csx ดัดแปลง ถ้าฉัน = ส ผลลัพธ์ลายเซ็นต์คือ \(\sigma\) = (I, c1, . . . , cn, r1, . . . , rn) 9 VER: รับข้อความ m, ชุด S, ลายเซ็น \(\sigma\) และเอาต์พุตเป็น "จริง" หรือ "เท็จ" LNK: รับชุด I = {Ii} ลายเซ็น \(\sigma\) และเอาต์พุต "เชื่อมโยง" หรือ "indep" แนวคิดเบื้องหลังโปรโตคอลนั้นค่อนข้างง่าย: ผู้ใช้สร้างลายเซ็นซึ่งสามารถเป็นได้ ตรวจสอบโดยชุดกุญแจสาธารณะแทนที่จะเป็นกุญแจสาธารณะเฉพาะ ตัวตนของผู้ลงนามคือ แยกไม่ออกจากผู้ใช้รายอื่นที่มีกุญแจสาธารณะอยู่ในชุดจนกว่าเจ้าของจะผลิต ลายเซ็นที่สองโดยใช้คู่กุญแจเดียวกัน คีย์ส่วนตัว x0 \(\cdots\) ซี \(\cdots\) xn กุญแจสาธารณะ ป0 \(\cdots\) พาย \(\cdots\) พีเอ็น แหวน ลายเซ็น ลงชื่อ ตรวจสอบ มะเดื่อ 6. การไม่เปิดเผยชื่อลายเซ็นของแหวน GEN: ผู้ลงนามเลือกคีย์ลับแบบสุ่ม \(x \in [1, l - 1]\) และคำนวณค่าที่สอดคล้องกัน กุญแจสาธารณะ P = xG นอกจากนี้เขายังคำนวณกุญแจสาธารณะอีกอัน I = xHp(P) ซึ่งเราจะทำ เรียกว่า “ภาพสำคัญ” SIG: ผู้ลงนามสร้างลายเซ็นวงแหวนแบบครั้งเดียวโดยมีความรู้เป็นศูนย์แบบไม่โต้ตอบ พิสูจน์โดยใช้เทคนิคจาก [21] เขาเลือกเซตย่อยแบบสุ่ม \(S'\) ของ n จากผู้ใช้รายอื่น คีย์สาธารณะ Pi, คู่คีย์ของเขาเอง (x, P) และคีย์อิมเมจ I ให้ \(0 \leq s \leq n\) เป็นดัชนีลับของผู้ลงนาม ใน S (เพื่อให้รหัสสาธารณะของเขาคือ Ps) เขาสุ่มเลือก {qi | ฉัน = 0 . . . n} และ {wi | ฉัน = 0 . . . n, i ̸= s} จาก (1 . . . l) และใช้ การเปลี่ยนแปลงต่อไปนี้: หลี่ = ( ชี่จี, ถ้าฉัน = ส คิวจี + วิปิ, ถ้าฉัน ̸= ส ริ= ( ฉีHp(Pi) ถ้าฉัน = ส qiHp(Pi) + wiI, ถ้าฉัน ̸= ส ขั้นตอนต่อไปคือการได้รับความท้าทายแบบไม่โต้ตอบ: c = Hs(ม, L1, . . . , Ln, R1, . . . , Rn) ในที่สุดผู้ลงนามจะคำนวณคำตอบ: ซี = วิ ถ้าฉัน ̸= ส ค - เอ็นพี ผม=0 ci ดัดแปลง ถ้าฉัน = ส ริ = ( ฉี ถ้าฉัน ̸= ส qs −csx ดัดแปลง ถ้าฉัน = ส ผลลัพธ์ลายเซ็นต์คือ \(\sigma\) = (I, c1, . . . , cn, r1, . . . , rn) 9 17 บางทีนี่อาจจะโง่ แต่ต้องระมัดระวังเมื่อรวม S และ P_s หากคุณเพียงแค่ต่อท้าย พับลิกคีย์ตัวสุดท้าย การเชื่อมต่อไม่ได้เสียหายเพราะใครก็ตามที่ตรวจสอบธุรกรรมที่ส่งผ่าน สามารถตรวจสอบรหัสสาธารณะล่าสุดที่แสดงในแต่ละธุรกรรมและบูมได้ นั่นคือกุญแจสาธารณะ ที่เกี่ยวข้องกับผู้ส่ง ดังนั้นหลังจากการรวมตัวแล้ว จะต้องมีเครื่องกำเนิดตัวเลขสุ่มเทียม ใช้เพื่อสับเปลี่ยนกุญแจสาธารณะที่เลือก "...จนกว่าเจ้าของจะจัดทำลายเซ็นครั้งที่สองโดยใช้คู่กุญแจอันเดียวกัน" ฉันหวังว่าผู้เขียน(s?) จะอธิบายรายละเอียดเกี่ยวกับเรื่องนี้ ฉันเชื่อว่านี่หมายถึง "ตรวจสอบให้แน่ใจว่าทุกครั้งที่คุณเลือกชุดกุญแจสาธารณะเพื่อทำให้สับสน ตัวคุณเองด้วย คุณเลือกชุดใหม่ที่ไม่มีกุญแจสองดอกเหมือนกัน" ซึ่งดูเหมือนก สภาพค่อนข้างแข็งแกร่งเมื่อไม่สามารถเชื่อมต่อได้ บางที "คุณเลือกชุดสุ่มใหม่จาก กุญแจที่เป็นไปได้ทั้งหมด" โดยมีสมมติฐานว่าถึงแม้ทางแยกที่ไม่เล็กน้อยจะหลีกเลี่ยงไม่ได้ เกิดขึ้นก็ไม่ได้เกิดขึ้นบ่อยนัก ไม่ว่าจะด้วยวิธีใด ฉันต้องเจาะลึกลงไปในข้อความนี้ นี่คือการสร้างลายเซ็นแหวน การพิสูจน์ที่ไม่มีความรู้นั้นยอดเยี่ยมมาก ฉันขอท้าให้คุณพิสูจน์ให้ฉันเห็นว่าคุณรู้ความลับ โดยไม่เปิดเผยความลับ เช่น สมมติว่าเราอยู่ปากทางเข้าถ้ำรูปโดนัท และด้านหลังถ้ำ (เกินสายตาจากทางเข้า) มีโอประตูทางใหม่ที่คุณไป อ้างว่าคุณมีกุญแจ ถ้าคุณไปทางเดียว มันจะทำให้คุณผ่านไปได้เสมอ แต่ถ้าคุณไปทางนั้น ไปทางอื่นคุณต้องมีกุญแจ แต่คุณไม่ต้องการแสดงกุญแจให้ฉันเห็นด้วยซ้ำ แสดงให้ฉันเห็นว่ามันเปิดประตู แต่คุณต้องการพิสูจน์ให้ฉันเห็นว่าคุณรู้วิธีเปิด ประตู ในสภาพแวดล้อมแบบโต้ตอบ ฉันจะหงายเหรียญ หัวอยู่ซ้าย หางอยู่ขวา แล้วคุณก็ลงไป ถ้ำรูปโดนัทไม่ว่าเหรียญจะพาคุณไปในทางใดก็ตาม ที่ด้านหลังสุดสายตาของฉันคุณ เปิดประตูกลับมาอีกด้าน เราทำซ้ำการทดลองหยอดเหรียญ จนกว่าฉันจะพอใจที่คุณมีกุญแจ แต่นั่นเป็นการพิสูจน์ความรู้แบบไม่มีศูนย์เชิงโต้ตอบอย่างชัดเจน มีเวอร์ชันที่ไม่โต้ตอบซึ่งคุณและฉันไม่ต้องสื่อสารกัน ด้วยวิธีนี้ไม่มีผู้ดักฟังสามารถรบกวนได้ http://en.wikipedia.org/wiki/Zero-knowledge_proof สิ่งนี้กลับกันจากคำจำกัดความก่อนหน้า
VER: รับข้อความ m, ชุด S, ลายเซ็น \(\sigma\) และเอาต์พุตเป็น "จริง" หรือ "เท็จ" LNK: รับชุด I = {Ii} ลายเซ็น \(\sigma\) และเอาต์พุต "เชื่อมโยง" หรือ "indep" แนวคิดเบื้องหลังโปรโตคอลนั้นค่อนข้างง่าย: ผู้ใช้สร้างลายเซ็นซึ่งสามารถเป็นได้ ตรวจสอบโดยชุดกุญแจสาธารณะแทนที่จะเป็นกุญแจสาธารณะเฉพาะ ตัวตนของผู้ลงนามคือ แยกไม่ออกจากผู้ใช้รายอื่นที่มีกุญแจสาธารณะอยู่ในชุดจนกว่าเจ้าของจะผลิต ลายเซ็นที่สองโดยใช้คู่กุญแจเดียวกัน คีย์ส่วนตัว x0 \(\cdots\) ซี \(\cdots\) xn กุญแจสาธารณะ ป0 \(\cdots\) พาย \(\cdots\) พีเอ็น แหวน ลายเซ็น ลงชื่อ ตรวจสอบ มะเดื่อ 6. การไม่เปิดเผยชื่อลายเซ็นของแหวน GEN: ผู้ลงนามเลือกคีย์ลับแบบสุ่ม \(x \in [1, l - 1]\) และคำนวณค่าที่สอดคล้องกัน กุญแจสาธารณะ P = xG นอกจากนี้เขายังคำนวณกุญแจสาธารณะอีกอัน I = xHp(P) ซึ่งเราจะทำ เรียกว่า “ภาพสำคัญ” SIG: ผู้ลงนามสร้างลายเซ็นวงแหวนแบบครั้งเดียวโดยมีความรู้เป็นศูนย์แบบไม่โต้ตอบ พิสูจน์โดยใช้เทคนิคจาก [21] เขาเลือกเซตย่อยแบบสุ่ม \(S'\) ของ n จากผู้ใช้รายอื่น คีย์สาธารณะ Pi, คู่คีย์ของเขาเอง (x, P) และคีย์อิมเมจ I ให้ \(0 \leq s \leq n\) เป็นดัชนีลับของผู้ลงนาม ใน S (เพื่อให้รหัสสาธารณะของเขาคือ Ps) เขาสุ่มเลือก {qi | ฉัน = 0 . . . n} และ {wi | ฉัน = 0 . . . n, i ̸= s} จาก (1 . . . l) และใช้ การเปลี่ยนแปลงต่อไปนี้: หลี่ = ( ชี่จี, ถ้าฉัน = ส คิวจี + วิปิ, ถ้าฉัน ̸= ส ริ= ( ฉีHp(Pi) ถ้าฉัน = ส qiHp(Pi) + wiI, ถ้าฉัน ̸= ส ขั้นตอนต่อไปคือการได้รับความท้าทายแบบไม่โต้ตอบ: c = Hs(ม, L1, . . . , Ln, R1, . . . , Rn) ในที่สุดผู้ลงนามจะคำนวณคำตอบ: ซี = วิ ถ้าฉัน ̸= ส ค - เอ็นพี ผม=0 ci ดัดแปลง ถ้าฉัน = ส ริ = ( ฉี ถ้าฉัน ̸= ส qs −csx ดัดแปลง ถ้าฉัน = ส ผลลัพธ์ลายเซ็นต์คือ \(\sigma\) = (I, c1, . . . , cn, r1, . . . , rn) 9 VER: รับข้อความ m, ชุด S, ลายเซ็น \(\sigma\) และเอาต์พุตเป็น "จริง" หรือ "เท็จ" LNK: รับชุด I = {Ii} ลายเซ็น \(\sigma\) และเอาต์พุต "เชื่อมโยง" หรือ "indep" แนวคิดเบื้องหลังโปรโตคอลนั้นค่อนข้างง่าย: ผู้ใช้สร้างลายเซ็นซึ่งสามารถเป็นได้ ตรวจสอบโดยชุดกุญแจสาธารณะแทนที่จะเป็นกุญแจสาธารณะเฉพาะ ตัวตนของผู้ลงนามคือ แยกไม่ออกจากผู้ใช้รายอื่นที่มีกุญแจสาธารณะอยู่ในชุดจนกว่าเจ้าของจะผลิต ลายเซ็นที่สองโดยใช้คู่กุญแจเดียวกัน คีย์ส่วนตัว x0 \(\cdots\) ซี \(\cdots\) xn กุญแจสาธารณะ ป0 \(\cdots\) พาย \(\cdots\) พีเอ็น แหวน ลายเซ็น ลงชื่อ ตรวจสอบ มะเดื่อ 6. การไม่เปิดเผยชื่อลายเซ็นของแหวน GEN: ผู้ลงนามเลือกคีย์ลับแบบสุ่ม \(x \in [1, l - 1]\) และคำนวณค่าที่สอดคล้องกัน กุญแจสาธารณะ P = xG นอกจากนี้เขายังคำนวณกุญแจสาธารณะอีกอัน I = xHp(P) ซึ่งเราจะทำ เรียกว่า “ภาพสำคัญ” SIG: ผู้ลงนามสร้างลายเซ็นวงแหวนแบบครั้งเดียวโดยมีความรู้เป็นศูนย์แบบไม่โต้ตอบ พิสูจน์โดยใช้เทคนิคจาก [21] เขาเลือกเซตย่อยแบบสุ่ม \(S'\) ของ n จากผู้ใช้รายอื่น คีย์สาธารณะ Pi, คู่คีย์ของเขาเอง (x, P) และคีย์อิมเมจ I ให้ \(0 \leq s \leq n\) เป็นดัชนีลับของผู้ลงนาม ใน S (เพื่อให้รหัสสาธารณะของเขาคือ Ps) เขาสุ่มเลือก {qi | ฉัน = 0 . . . n} และ {wi | ฉัน = 0 . . . n, i ̸= s} จาก (1 . . . l) และใช้ การเปลี่ยนแปลงต่อไปนี้: หลี่ = ( ชี่จี, ถ้าฉัน = ส คิวจี + วิปิ, ถ้าฉัน ̸= ส ริ= ( ฉีHp(Pi) ถ้าฉัน = ส qiHp(Pi) + wiI, ถ้าฉัน ̸= ส ขั้นตอนต่อไปคือการได้รับความท้าทายแบบไม่โต้ตอบ: c = Hs(ม, L1, . . . , Ln, R1, . . . , Rn) ในที่สุดผู้ลงนามจะคำนวณคำตอบ: ซี = วิ ถ้าฉัน ̸= ส ค - เอ็นพี ผม=0 ci ดัดแปลง ถ้าฉัน = ส ริ = ( ฉี ถ้าฉัน ̸= ส qs −csx ดัดแปลง ถ้าฉัน = ส ผลลัพธ์ลายเซ็นต์คือ \(\sigma\) = (I, c1, . . . , cn, r1, . . . , rn) 9 18 พื้นที่ทั้งหมดนี้เป็นผู้ไม่เชื่อเรื่อง cryptonote เพียงแค่อธิบายอัลกอริธึมลายเซ็นวงแหวนโดยไม่มี อ้างอิงถึงสกุลเงิน ฉันสงสัยว่าสัญกรณ์บางอย่างสอดคล้องกับส่วนที่เหลือของรายงาน แม้ว่า ตัวอย่างเช่น x คือคีย์ลับ "สุ่ม" ที่เลือกใน GEN ซึ่งให้คีย์สาธารณะ P และอิมเมจคีย์สาธารณะ I ค่าของ x นี้คือค่าที่ Bob คำนวณไว้ในตอนที่ 6 หน้า 8 นี่ก็คือ เริ่มคลายความสับสนจากคำอธิบายที่แล้ว นี่มันเจ๋งมาก เงินไม่ได้ถูกโอนจาก "ที่อยู่สาธารณะของอลิซไปยังสาธารณะของ Bob ที่อยู่" กำลังโอนจากที่อยู่แบบครั้งเดียวไปยังที่อยู่แบบครั้งเดียว ในแง่หนึ่ง นี่คือวิธีการทำงานของนักเรียน ถ้าอเล็กซ์มี cryptonotes เพราะใครบางคน ส่งให้พวกเขาไปหาเธอ ซึ่งหมายความว่าเธอมีกุญแจส่วนตัวที่จำเป็นในการส่งให้บ็อบ เธอใช้ การแลกเปลี่ยน Diffie-Hellman โดยใช้ข้อมูลสาธารณะของ Bob เพื่อสร้างที่อยู่แบบครั้งเดียวใหม่ และ cryptonotes จะถูกโอนไปยังที่อยู่นั้น ขณะนี้ เนื่องจากมีการใช้การแลกเปลี่ยน DH (น่าจะปลอดภัย) เพื่อสร้างที่อยู่แบบครั้งเดียวใหม่ ซึ่งอเล็กซ์ส่ง CN ของเธอให้ Bob เป็นคนเดียวที่มีคีย์ส่วนตัวที่จำเป็นในการทำซ้ำ ด้านบน ตอนนี้บ๊อบก็คืออเล็กซ์ http://en.wikipedia.org/wiki/Piecewise#Notation_and_interpretation ผลรวมควรจัดทำดัชนีเหนือ j ไม่ใช่ i แต่ละ c_i เป็นขยะแบบสุ่ม (เนื่องจาก w_i เป็นแบบสุ่ม) ยกเว้นตูด c_iเชื่อมโยงกับรหัสจริงที่เกี่ยวข้องกับลายเซ็นนี้ ค่าของ c คือ a hash ของข้อมูลก่อนหน้านี้ ฉันคิดว่านี่อาจมีการพิมพ์ผิดที่แย่กว่าการใช้ดัชนี 'i' อีกครั้งเพราะดูเหมือนว่า c_s โดยปริยาย, ไม่ชัดเจน, กำหนดไว้. อันที่จริง หากเราใช้สมการนี้โดยอาศัยศรัทธา เราจะตัดสินว่า c_s = (1/2)c - (1/2) sum_i neq s c_i นั่นคือ hash ลบตัวเลขสุ่มทั้งกลุ่ม ในทางกลับกัน หากการรวมนี้ตั้งใจให้อ่าน "c_s = (c - sum_j neq s c_j) mod l" จากนั้นเราจะนำ hash จากข้อมูลก่อนหน้าของเรามาสร้างตัวเลขสุ่มจำนวนหนึ่ง ลบตัวเลขสุ่มเหล่านั้นทั้งหมดของ hash และนั่นทำให้เรา c_s ดูเหมือนว่าจะเป็นเช่นนั้น สิ่งที่ "ควร" เกิดขึ้นตามสัญชาตญาณของฉัน และตรงกับขั้นตอนการตรวจสอบในหน้า 10 แต่สัญชาตญาณไม่ใช่คณิตศาสตร์ ฉันจะเจาะลึกเรื่องนี้ เหมือนเมื่อก่อน; ทั้งหมดนี้จะเป็นขยะแบบสุ่ม ยกเว้นอันที่เกี่ยวข้องกับของจริง กุญแจสาธารณะของผู้ลงนาม x ยกเว้นครั้งนี้ นี่คือสิ่งที่ฉันคาดหวังจากโครงสร้างมากกว่านี้: r_i เป็นการสุ่มสำหรับ i!=s และ r_s ถูกกำหนดโดยค่าลับ x และค่าดัชนี s ของ q_i และ c_i
VER: ผู้ตรวจสอบจะตรวจสอบลายเซ็นโดยใช้การแปลงแบบผกผัน: ( ล' ฉัน = riG + ciPi อาร์' i = riHp(Pi) + ciI สุดท้าย ผู้ตรวจสอบจะตรวจสอบว่า เอ็นพี ผม=0 ci ?= Hs(ม, L′ 0, . . . , ล' เอ็น, ร' 0, . . . , ร' ก) ม็อด ล หากความเท่าเทียมกันนี้ถูกต้อง ผู้ตรวจสอบจะรันอัลกอริทึม LNK มิฉะนั้นผู้ตรวจสอบจะปฏิเสธ ลายเซ็น LNK: ผู้ตรวจสอบจะตรวจสอบว่าฉันถูกใช้ในลายเซ็นที่ผ่านมาหรือไม่ (ค่าเหล่านี้จะถูกเก็บไว้ในไฟล์ ตั้งฉัน) การใช้งานหลายครั้งหมายความว่ามีการสร้างลายเซ็นสองรายการภายใต้รหัสลับเดียวกัน ความหมายของระเบียบการ: โดยการใช้การแปลงรูปตัว L ผู้ลงนามจะพิสูจน์ว่าเขารู้ x ดังกล่าว โดยที่อย่างน้อยหนึ่ง Pi = xG เพื่อให้การพิสูจน์นี้ไม่สามารถทำซ้ำได้ เราจึงแนะนำอิมเมจหลัก เนื่องจาก I = xHp(P) ผู้ลงนามใช้ coefficients เดียวกัน (ri, ci) เพื่อพิสูจน์ข้อความที่เกือบจะเหมือนกัน: เขารู้ x อย่างน้อยหนึ่ง \(H_p(P_i) = I \cdot x^{-1}\) หากการแมป \(x \to I\) เป็นการเติม: 1. ไม่มีใครสามารถกู้คืนคีย์สาธารณะจากอิมเมจคีย์และระบุผู้ลงนามได้ 2. ผู้ลงนามไม่สามารถลงนามสองลายเซ็นที่มี I ต่างกันและมี x เหมือนกันได้ การวิเคราะห์ความปลอดภัยฉบับสมบูรณ์มีให้ไว้ในภาคผนวก A 4.5 ธุรกรรม CryptoNote มาตรฐาน ด้วยการรวมทั้งสองวิธีเข้าด้วยกัน (กุญแจสาธารณะที่ไม่สามารถเชื่อมโยงได้และลายเซ็นวงแหวนที่ไม่สามารถติดตามได้) Bob ประสบความสำเร็จ ระดับความเป็นส่วนตัวใหม่เมื่อเปรียบเทียบกับแผน Bitcoin ดั้งเดิม มันต้องการให้เขาเก็บเท่านั้น หนึ่งคีย์ส่วนตัว (a, b) และเผยแพร่ (A, B) เพื่อเริ่มรับและส่งธุรกรรมที่ไม่ระบุชื่อ ในขณะที่ตรวจสอบความถูกต้องของธุรกรรมแต่ละรายการ Bob ยังทำการคูณเส้นโค้งวงรีเพียงสองครั้งและบวกอีกหนึ่งรายการต่อเอาต์พุตเพื่อตรวจสอบว่าธุรกรรมเป็นของเขาหรือไม่ สำหรับเขาทุกๆ เอาต์พุต Bob กู้คืนคู่คีย์แบบครั้งเดียว (pi, Pi) และเก็บไว้ในกระเป๋าเงินของเขา อินพุตใดก็ได้ ได้รับการพิสูจน์โดยสถานการณ์ว่ามีเจ้าของคนเดียวกันก็ต่อเมื่อปรากฏในการทำธุรกรรมครั้งเดียว ใน ความจริงแล้วความสัมพันธ์นี้สร้างได้ยากกว่ามากเนื่องจากการลงนามแหวนเพียงครั้งเดียว ด้วยลายเซ็นต์ของแหวน Bob สามารถซ่อนทุกอินพุตระหว่างของคนอื่นได้อย่างมีประสิทธิภาพ เป็นไปได้ทั้งหมด ผู้ใช้จ่ายจะสวมใส่ได้ แม้แต่เจ้าของคนก่อน (อลิซ) ก็ไม่มีข้อมูลมากไปกว่านั้น ผู้สังเกตการณ์คนใดคนหนึ่ง เมื่อลงนามในธุรกรรมของเขา Bob จะระบุเอาต์พุตต่างประเทศด้วยจำนวนเดียวกันกับของเขา เอาท์พุทผสมทั้งหมดโดยไม่ต้องมีส่วนร่วมของผู้ใช้รายอื่น บ๊อบเอง (เช่นเดียวกับ ใครก็ตาม) ไม่ทราบว่าได้ใช้การชำระเงินเหล่านี้ไปแล้วหรือไม่: สามารถใช้เอาต์พุตได้ ลายเซ็นหลายพันลายเซ็นถือเป็นปัจจัยแห่งความคลุมเครือและไม่เคยตกเป็นเป้าหมายของการซ่อนตัว ดับเบิ้ล การตรวจสอบการใช้จ่ายเกิดขึ้นในเฟส LNK เมื่อตรวจสอบกับชุดอิมเมจหลักที่ใช้ บ๊อบสามารถเลือกระดับความคลุมเครือได้ด้วยตัวเอง: n = 1 หมายความว่าความน่าจะเป็นที่เขามี ใช้เอาท์พุตคือความน่าจะเป็น 50%, n = 99 ให้ 1% ขนาดของลายเซ็นผลลัพธ์จะเพิ่มขึ้น เชิงเส้นตรงเท่ากับ O(n+1) ดังนั้นการปรับปรุงการไม่เปิดเผยตัวตนจะมีค่าใช้จ่ายค่าธรรมเนียมการทำธุรกรรมเพิ่มเติมของ Bob เขายังสามารถ ตั้งค่า n = 0 และทำให้ลายเซ็นวงแหวนของเขาประกอบด้วยองค์ประกอบเดียวเท่านั้น อย่างไรก็ตาม สิ่งนี้จะเกิดขึ้นทันที เผยให้เห็นว่าเขาเป็นคนใช้จ่าย 10 VER: ผู้ตรวจสอบจะตรวจสอบลายเซ็นโดยใช้การแปลงแบบผกผัน: ( ล' ฉัน = riG + ciPi อาร์' i = riHp(Pi) + ciI สุดท้าย ผู้ตรวจสอบจะตรวจสอบว่า เอ็นพี ผม=0 ci ?= Hs(ม, L′ 0, . . . , ล' เอ็น, ร' 0, . . . , ร' ก) ม็อด ล หากความเท่าเทียมกันนี้ถูกต้อง ผู้ตรวจสอบจะรันอัลกอริทึม LNK มิฉะนั้นผู้ตรวจสอบจะปฏิเสธ ลายเซ็น LNK: ผู้ตรวจสอบจะตรวจสอบว่าฉันถูกใช้ในลายเซ็นที่ผ่านมาหรือไม่ (ค่าเหล่านี้จะถูกเก็บไว้ในไฟล์ ตั้งฉัน) การใช้งานหลายครั้งหมายความว่ามีการสร้างลายเซ็นสองรายการภายใต้รหัสลับเดียวกัน ความหมายของระเบียบการ: โดยการใช้การแปลงรูปตัว L ผู้ลงนามจะพิสูจน์ว่าเขารู้ x ดังกล่าว โดยที่อย่างน้อยหนึ่ง Pi = xG เพื่อให้การพิสูจน์นี้ไม่สามารถทำซ้ำได้ เราจึงแนะนำอิมเมจหลัก เนื่องจาก I = xHp(P) ผู้ลงนามใช้ coefficients เดียวกัน (ri, ci) เพื่อพิสูจน์ข้อความที่เกือบจะเหมือนกัน: เขารู้ x อย่างน้อยหนึ่ง \(H_p(P_i) = I \cdot x^{-1}\) หากการแมป \(x \to I\) เป็นการเติม: 1. ไม่มีใครสามารถกู้คืนคีย์สาธารณะจากอิมเมจคีย์และระบุผู้ลงนามได้ 2. ผู้ลงนามไม่สามารถลงนามสองลายเซ็นที่มี I ต่างกันและมี x เหมือนกันได้ การวิเคราะห์ความปลอดภัยฉบับสมบูรณ์มีให้ไว้ในภาคผนวก A 4.5 ธุรกรรม CryptoNote มาตรฐาน ด้วยการรวมทั้งสองวิธีเข้าด้วยกัน (กุญแจสาธารณะที่ไม่สามารถเชื่อมโยงได้และลายเซ็นวงแหวนที่ไม่สามารถติดตามได้) Bob ประสบความสำเร็จ ระดับความเป็นส่วนตัวใหม่เมื่อเปรียบเทียบกับแผน Bitcoin ดั้งเดิม มันต้องการให้เขาเก็บเท่านั้น หนึ่งคีย์ส่วนตัว (a, b) และเผยแพร่ (A, B) เพื่อเริ่มรับและส่งธุรกรรมที่ไม่ระบุชื่อ ในขณะที่ตรวจสอบความถูกต้องของธุรกรรมแต่ละรายการ Bob ยังทำการคูณเส้นโค้งวงรีเพียงสองครั้งและบวกอีกหนึ่งรายการต่อเอาต์พุตเพื่อตรวจสอบว่าธุรกรรมเป็นของเขาหรือไม่ สำหรับเขาทุกๆ เอาต์พุต Bob กู้คืนคู่คีย์แบบครั้งเดียว (pi, Pi) และ stแร่มันอยู่ในกระเป๋าเงินของเขา อินพุตใดก็ได้ ได้รับการพิสูจน์โดยสถานการณ์ว่ามีเจ้าของคนเดียวกันก็ต่อเมื่อปรากฏในการทำธุรกรรมครั้งเดียว ใน ความจริงแล้วความสัมพันธ์นี้สร้างได้ยากกว่ามากเนื่องจากการลงนามแหวนเพียงครั้งเดียว ด้วยลายเซ็นต์ของแหวน Bob สามารถซ่อนทุกอินพุตระหว่างของคนอื่นได้อย่างมีประสิทธิภาพ เป็นไปได้ทั้งหมด ผู้ใช้จ่ายจะสวมใส่ได้ แม้แต่เจ้าของคนก่อน (อลิซ) ก็ไม่มีข้อมูลมากไปกว่านั้น ผู้สังเกตการณ์คนใดคนหนึ่ง เมื่อลงนามในธุรกรรมของเขา Bob จะระบุเอาต์พุตต่างประเทศด้วยจำนวนเดียวกันกับของเขา เอาท์พุทผสมทั้งหมดโดยไม่ต้องมีส่วนร่วมของผู้ใช้รายอื่น บ๊อบเอง (เช่นเดียวกับ ใครก็ตาม) ไม่ทราบว่าได้ใช้การชำระเงินเหล่านี้ไปแล้วหรือไม่: สามารถใช้เอาต์พุตได้ ลายเซ็นหลายพันลายเซ็นถือเป็นปัจจัยแห่งความคลุมเครือและไม่เคยตกเป็นเป้าหมายของการซ่อนตัว ดับเบิ้ล การตรวจสอบการใช้จ่ายเกิดขึ้นในเฟส LNK เมื่อตรวจสอบกับชุดอิมเมจหลักที่ใช้ บ๊อบสามารถเลือกระดับความคลุมเครือได้ด้วยตัวเอง: n = 1 หมายความว่าความน่าจะเป็นที่เขามี ใช้เอาท์พุตคือความน่าจะเป็น 50%, n = 99 ให้ 1% ขนาดของลายเซ็นผลลัพธ์จะเพิ่มขึ้น เชิงเส้นตรงเท่ากับ O(n+1) ดังนั้นการปรับปรุงการไม่เปิดเผยตัวตนจะมีค่าใช้จ่ายค่าธรรมเนียมการทำธุรกรรมเพิ่มเติมของ Bob เขายังสามารถ ตั้งค่า n = 0 และทำให้ลายเซ็นวงแหวนของเขาประกอบด้วยองค์ประกอบเดียวเท่านั้น อย่างไรก็ตาม สิ่งนี้จะเกิดขึ้นทันที เผยให้เห็นว่าเขาเป็นคนใช้จ่าย 10 19 เมื่อมาถึงจุดนี้ฉันสับสนมาก Alex ได้รับข้อความ M พร้อมลายเซ็น (I,c_1, ..., c_n, r_1, ..., r_n) และรายชื่อสาธารณะ คีย์ เอส และเธอวิ่ง VER สิ่งนี้จะคำนวณ L_i’ และ R_i’ สิ่งนี้ยืนยันว่า c_s = c - sum_i neq s c_i ในหน้าก่อนหน้า ตอนแรกฉันรู้สึกสับสนมาก (ฮ่า) ใครๆ ก็สามารถคำนวณ L_i’ และ R_i’ ได้ แท้จริงแล้วแต่ละ r_i และ c_i ได้รับการเผยแพร่ในลายเซ็นแล้ว ซิกมาพร้อมกับค่าสำหรับ I เซต S = P_i ของกุญแจสาธารณะทั้งหมดก็ได้รับการเผยแพร่เช่นกัน ดังนั้นใครที่ได้ดูซิกม่าและเซ็ตของ คีย์ S = P_i จะได้รับค่าเดียวกันสำหรับ L_i’ และ R_i’ ดังนั้นให้ตรวจสอบลายเซ็น แต่แล้วฉันก็จำได้ว่าส่วนนี้เป็นเพียงการอธิบายอัลกอริธึมลายเซ็น ไม่ใช่ "ตรวจสอบ หากลงนามแล้ว ให้ตรวจสอบว่าส่งถึงฉันหรือไม่ และหากเป็นเช่นนั้น ก็ให้ใช้เงิน" นี่เป็นเพียง ส่วนหนึ่งของเกมอันเป็นเอกลักษณ์ ฉันสนใจที่จะอ่านภาคผนวก A เมื่อไปถึงที่นั่นในที่สุด ฉันต้องการดูการเปรียบเทียบการดำเนินการโดยเต็มรูปแบบของ Cryptonote กับ Bitcoin อีกทั้งไฟฟ้า/ความยั่งยืน อัลกอริธึมส่วนใดที่ประกอบขึ้นเป็น "อินพุต" ที่นี่ ฉันเชื่อว่าอินพุตธุรกรรมคือจำนวนเงินและชุดของ UTXOs ที่รวมกันเป็นจำนวนที่มากกว่า จำนวน. สิ่งนี้ไม่ชัดเจน “เป้าหมายในการซ่อนตัว?” ฉันคิดเกี่ยวกับเรื่องนี้มาสองสามนาทีแล้วและฉันก็ยังไม่ได้ ความคิดที่คลุมเครือที่สุดว่ามันอาจหมายถึงอะไร การโจมตีแบบใช้จ่ายสองครั้งสามารถทำได้โดยการจัดการคีย์ที่ใช้ที่รับรู้ของโหนดเท่านั้น ชุดรูปภาพ \(I\) "ระดับความคลุมเครือ" = n แต่จำนวนกุญแจสาธารณะทั้งหมดที่รวมอยู่ในธุรกรรมคือ n+1 กล่าวคือ ระดับความกำกวมจะเป็น "คุณต้องการให้มีบุคคลอื่นอีกกี่คน" ฝูงชน?” คำตอบน่าจะเป็น "ให้มากที่สุด" โดยค่าเริ่มต้น
VER: ผู้ตรวจสอบจะตรวจสอบลายเซ็นโดยใช้การแปลงแบบผกผัน: ( ล' ฉัน = riG + ciPi อาร์' i = riHp(Pi) + ciI สุดท้าย ผู้ตรวจสอบจะตรวจสอบว่า เอ็นพี ผม=0 ci ?= Hs(ม, L′ 0, . . . , ล' เอ็น, ร' 0, . . . , ร' ก) ม็อด ล หากความเท่าเทียมกันนี้ถูกต้อง ผู้ตรวจสอบจะรันอัลกอริทึม LNK มิฉะนั้นผู้ตรวจสอบจะปฏิเสธ ลายเซ็น LNK: ผู้ตรวจสอบจะตรวจสอบว่าฉันถูกใช้ในลายเซ็นที่ผ่านมาหรือไม่ (ค่าเหล่านี้จะถูกเก็บไว้ในไฟล์ ตั้งฉัน) การใช้งานหลายครั้งหมายความว่ามีการสร้างลายเซ็นสองรายการภายใต้รหัสลับเดียวกัน ความหมายของระเบียบการ: โดยการใช้การแปลงรูปตัว L ผู้ลงนามจะพิสูจน์ว่าเขารู้ x ดังกล่าว โดยที่อย่างน้อยหนึ่ง Pi = xG เพื่อให้การพิสูจน์นี้ไม่สามารถทำซ้ำได้ เราจึงแนะนำอิมเมจหลัก เนื่องจาก I = xHp(P) ผู้ลงนามใช้ coefficients เดียวกัน (ri, ci) เพื่อพิสูจน์ข้อความที่เกือบจะเหมือนกัน: เขารู้ x อย่างน้อยหนึ่ง \(H_p(P_i) = I \cdot x^{-1}\) หากการแมป \(x \to I\) เป็นการเติม: 1. ไม่มีใครสามารถกู้คืนคีย์สาธารณะจากอิมเมจคีย์และระบุผู้ลงนามได้ 2. ผู้ลงนามไม่สามารถลงนามสองลายเซ็นที่มี I ต่างกันและมี x เหมือนกันได้ การวิเคราะห์ความปลอดภัยฉบับสมบูรณ์มีให้ไว้ในภาคผนวก A 4.5 ธุรกรรม CryptoNote มาตรฐาน ด้วยการรวมทั้งสองวิธีเข้าด้วยกัน (กุญแจสาธารณะที่ไม่สามารถเชื่อมโยงได้และลายเซ็นวงแหวนที่ไม่สามารถติดตามได้) Bob ประสบความสำเร็จ ระดับความเป็นส่วนตัวใหม่เมื่อเปรียบเทียบกับแผน Bitcoin ดั้งเดิม มันต้องการให้เขาเก็บเท่านั้น หนึ่งคีย์ส่วนตัว (a, b) และเผยแพร่ (A, B) เพื่อเริ่มรับและส่งธุรกรรมที่ไม่ระบุชื่อ ในขณะที่ตรวจสอบความถูกต้องของธุรกรรมแต่ละรายการ Bob ยังทำการคูณเส้นโค้งวงรีเพียงสองครั้งและบวกอีกหนึ่งรายการต่อเอาต์พุตเพื่อตรวจสอบว่าธุรกรรมเป็นของเขาหรือไม่ สำหรับเขาทุกๆ เอาต์พุต Bob กู้คืนคู่คีย์แบบครั้งเดียว (pi, Pi) และเก็บไว้ในกระเป๋าเงินของเขา อินพุตใดก็ได้ ได้รับการพิสูจน์โดยสถานการณ์ว่ามีเจ้าของคนเดียวกันก็ต่อเมื่อปรากฏในการทำธุรกรรมครั้งเดียว ใน ความจริงแล้วความสัมพันธ์นี้สร้างได้ยากกว่ามากเนื่องจากการลงนามแหวนเพียงครั้งเดียว ด้วยลายเซ็นต์ของแหวน Bob สามารถซ่อนทุกอินพุตระหว่างของคนอื่นได้อย่างมีประสิทธิภาพ เป็นไปได้ทั้งหมด ผู้ใช้จ่ายจะสวมใส่ได้ แม้แต่เจ้าของคนก่อน (อลิซ) ก็ไม่มีข้อมูลมากไปกว่านั้น ผู้สังเกตการณ์คนใดคนหนึ่ง เมื่อลงนามในธุรกรรมของเขา Bob จะระบุเอาต์พุตต่างประเทศด้วยจำนวนเดียวกันกับของเขา เอาท์พุทผสมทั้งหมดโดยไม่ต้องมีส่วนร่วมของผู้ใช้รายอื่น บ๊อบเอง (เช่นเดียวกับ ใครก็ตาม) ไม่ทราบว่าได้ใช้การชำระเงินเหล่านี้ไปแล้วหรือไม่: สามารถใช้เอาต์พุตได้ ลายเซ็นหลายพันลายเซ็นถือเป็นปัจจัยแห่งความคลุมเครือและไม่เคยตกเป็นเป้าหมายของการซ่อนตัว ดับเบิ้ล การตรวจสอบการใช้จ่ายเกิดขึ้นในเฟส LNK เมื่อตรวจสอบกับชุดอิมเมจหลักที่ใช้ บ๊อบสามารถเลือกระดับความคลุมเครือได้ด้วยตัวเอง: n = 1 หมายความว่าความน่าจะเป็นที่เขามี ใช้เอาท์พุตคือความน่าจะเป็น 50%, n = 99 ให้ 1% ขนาดของลายเซ็นผลลัพธ์จะเพิ่มขึ้น เชิงเส้นตรงเท่ากับ O(n+1) ดังนั้นการปรับปรุงการไม่เปิดเผยตัวตนจะมีค่าใช้จ่ายค่าธรรมเนียมการทำธุรกรรมเพิ่มเติมของ Bob เขายังสามารถ ตั้งค่า n = 0 และทำให้ลายเซ็นวงแหวนของเขาประกอบด้วยองค์ประกอบเดียวเท่านั้น อย่างไรก็ตาม สิ่งนี้จะเกิดขึ้นทันที เผยให้เห็นว่าเขาเป็นคนใช้จ่าย 10 VER: ผู้ตรวจสอบจะตรวจสอบลายเซ็นโดยใช้การแปลงแบบผกผัน: ( ล' ฉัน = riG + ciPi อาร์' i = riHp(Pi) + ciI สุดท้าย ผู้ตรวจสอบจะตรวจสอบว่า เอ็นพี ผม=0 ci ?= Hs(ม, L′ 0, . . . , ล' เอ็น, ร' 0, . . . , ร' ก) ม็อด ล หากความเท่าเทียมกันนี้ถูกต้อง ผู้ตรวจสอบจะรันอัลกอริทึม LNK มิฉะนั้นผู้ตรวจสอบจะปฏิเสธ ลายเซ็น LNK: ผู้ตรวจสอบจะตรวจสอบว่าฉันถูกใช้ในลายเซ็นที่ผ่านมาหรือไม่ (ค่าเหล่านี้จะถูกเก็บไว้ในไฟล์ ตั้งฉัน) การใช้งานหลายครั้งหมายความว่ามีการสร้างลายเซ็นสองรายการภายใต้รหัสลับเดียวกัน ความหมายของระเบียบการ: โดยการใช้การแปลงรูปตัว L ผู้ลงนามจะพิสูจน์ว่าเขารู้ x ดังกล่าว โดยที่อย่างน้อยหนึ่ง Pi = xG เพื่อให้การพิสูจน์นี้ไม่สามารถทำซ้ำได้ เราจึงแนะนำอิมเมจหลัก เนื่องจาก I = xHp(P) ผู้ลงนามใช้ coefficients เดียวกัน (ri, ci) เพื่อพิสูจน์ข้อความที่เกือบจะเหมือนกัน: เขารู้ x อย่างน้อยหนึ่ง \(H_p(P_i) = I \cdot x^{-1}\) หากการแมป \(x \to I\) เป็นการเติม: 1. ไม่มีใครสามารถกู้คืนคีย์สาธารณะจากอิมเมจคีย์และระบุผู้ลงนามได้ 2. ผู้ลงนามไม่สามารถลงนามสองลายเซ็นที่มี I ต่างกันและมี x เหมือนกันได้ การวิเคราะห์ความปลอดภัยฉบับสมบูรณ์มีให้ไว้ในภาคผนวก A 4.5 ธุรกรรม CryptoNote มาตรฐาน ด้วยการรวมทั้งสองวิธีเข้าด้วยกัน (กุญแจสาธารณะที่ไม่สามารถเชื่อมโยงได้และลายเซ็นวงแหวนที่ไม่สามารถติดตามได้) Bob ประสบความสำเร็จ ระดับความเป็นส่วนตัวใหม่เมื่อเปรียบเทียบกับแผน Bitcoin ดั้งเดิม มันต้องการให้เขาเก็บเท่านั้น หนึ่งคีย์ส่วนตัว (a, b) และเผยแพร่ (A, B) เพื่อเริ่มรับและส่งธุรกรรมที่ไม่ระบุชื่อ ในขณะที่ตรวจสอบความถูกต้องของธุรกรรมแต่ละรายการ Bob ยังทำการคูณเส้นโค้งวงรีเพียงสองครั้งและบวกอีกหนึ่งรายการต่อเอาต์พุตเพื่อตรวจสอบว่าธุรกรรมเป็นของเขาหรือไม่ สำหรับเขาทุกๆ เอาต์พุต Bob กู้คืนคู่คีย์แบบครั้งเดียว (pi, Pi) และ stแร่มันอยู่ในกระเป๋าเงินของเขา อินพุตใดก็ได้ ได้รับการพิสูจน์โดยสถานการณ์ว่ามีเจ้าของคนเดียวกันก็ต่อเมื่อปรากฏในการทำธุรกรรมครั้งเดียว ใน ความจริงแล้วความสัมพันธ์นี้สร้างได้ยากกว่ามากเนื่องจากการลงนามแหวนเพียงครั้งเดียว ด้วยลายเซ็นต์ของแหวน Bob สามารถซ่อนทุกอินพุตระหว่างของคนอื่นได้อย่างมีประสิทธิภาพ เป็นไปได้ทั้งหมด ผู้ใช้จ่ายจะสวมใส่ได้ แม้แต่เจ้าของคนก่อน (อลิซ) ก็ไม่มีข้อมูลมากไปกว่านั้น ผู้สังเกตการณ์คนใดคนหนึ่ง เมื่อลงนามในธุรกรรมของเขา Bob จะระบุเอาต์พุตต่างประเทศด้วยจำนวนเดียวกันกับของเขา เอาท์พุทผสมทั้งหมดโดยไม่ต้องมีส่วนร่วมของผู้ใช้รายอื่น บ๊อบเอง (เช่นเดียวกับ ใครก็ตาม) ไม่ทราบว่าได้ใช้การชำระเงินเหล่านี้ไปแล้วหรือไม่: สามารถใช้เอาต์พุตได้ ลายเซ็นหลายพันลายเซ็นถือเป็นปัจจัยแห่งความคลุมเครือและไม่เคยตกเป็นเป้าหมายของการซ่อนตัว ดับเบิ้ล การตรวจสอบการใช้จ่ายเกิดขึ้นในเฟส LNK เมื่อตรวจสอบกับชุดอิมเมจหลักที่ใช้ บ๊อบสามารถเลือกระดับความคลุมเครือได้ด้วยตัวเอง: n = 1 หมายความว่าความน่าจะเป็นที่เขามี ใช้เอาท์พุตคือความน่าจะเป็น 50%, n = 99 ให้ 1% ขนาดของลายเซ็นผลลัพธ์จะเพิ่มขึ้น เชิงเส้นตรงเท่ากับ O(n+1) ดังนั้นการปรับปรุงการไม่เปิดเผยตัวตนจะมีค่าใช้จ่ายค่าธรรมเนียมการทำธุรกรรมเพิ่มเติมของ Bob เขายังสามารถ ตั้งค่า n = 0 และทำให้ลายเซ็นวงแหวนของเขาประกอบด้วยองค์ประกอบเดียวเท่านั้น อย่างไรก็ตาม สิ่งนี้จะเกิดขึ้นทันที เผยให้เห็นว่าเขาเป็นคนใช้จ่าย 10 20 สิ่งนี้น่าสนใจ ก่อนหน้านี้ เราได้จัดเตรียมช่องทางให้ผู้รับ Bob เพื่อทำการ INCOMING ทั้งหมด ธุรกรรมที่ไม่สามารถยกเลิกการเชื่อมโยงได้โดยการเลือกครึ่งหนึ่งของคีย์ส่วนตัวของเขาตามที่กำหนดหรือโดย เผยแพร่คีย์ส่วนตัวของเขาครึ่งหนึ่งเป็นสาธารณะ นี่เป็นนโยบายประเภทที่ไม่มีการย้อนกลับ ที่นี่เราเห็น วิธีการของผู้ส่ง Alex ในการเลือกธุรกรรมขาออกรายการเดียวที่สามารถเชื่อมโยงได้ แต่ในความเป็นจริงแล้ว เผยอเล็กซ์เป็นผู้ส่งทั้งเครือข่าย นี่ไม่ใช่นโยบายประเภทที่ไม่มีการย้อนกลับ นี่คือธุรกรรมต่อธุรกรรม มีนโยบายที่สามหรือไม่? Bob ผู้รับสามารถสร้างรหัสการชำระเงินเฉพาะสำหรับ Alex ได้หรือไม่ ไม่เคยเปลี่ยนแปลง บางทีอาจใช้การแลกเปลี่ยน Diffie-Hellman? หากใครรวมการชำระเงินนั้นไว้ด้วย รหัสที่รวมไว้ที่ไหนสักแห่งในการทำธุรกรรมของเธอไปยังที่อยู่ของ Bob นั้นต้องมาจากอเล็กซ์ ด้วยวิธีนี้ อเล็กซ์ไม่จำเป็นต้องเปิดเผยตัวเองต่อทั้งเครือข่ายโดยเลือกที่จะเชื่อมโยงเครือข่ายใดเครือข่ายหนึ่งโดยเฉพาะ ทำธุรกรรม แต่เธอยังคงสามารถระบุตัวเองกับบุคคลที่เธอส่งเงินให้ได้ นี่ไม่ใช่สิ่งที่ Poloniex ทำใช่ไหม
การทำธุรกรรม อินพุต TX เอาท์พุต0 . . . เอาท์พุต . . . เอาท์พุต รูปภาพที่สำคัญ ลายเซ็น ลายเซ็นต์แหวน กุญแจปลายทาง เอาท์พุต1 กุญแจปลายทาง เอาท์พุต ธุรกรรมต่างประเทศ เอาต์พุตของผู้ส่ง กุญแจปลายทาง คู่กุญแจแบบครั้งเดียว ครั้งเดียว รหัสส่วนตัว ผม = xHp(P) พี,เอ็กซ์ รูปที่ 7 การสร้างลายเซ็น Ring ในธุรกรรมมาตรฐาน 5 หลักฐานการทำงานที่เท่าเทียมกัน ในส่วนนี้เราขอเสนอและวางอัลกอริทึม proof-of-work ใหม่ เป้าหมายหลักของเรา คือการปิดช่องว่างระหว่าง CPU (ส่วนใหญ่) และ GPU/FPGA/ASIC (ชนกลุ่มน้อย) ผู้ขุด มันคือ เหมาะสมที่ผู้ใช้บางคนสามารถมีข้อได้เปรียบเหนือผู้อื่นได้ แต่การลงทุนของพวกเขา ควรจะเติบโตอย่างน้อยเป็นเส้นตรงตามกำลัง โดยทั่วไปแล้ว การผลิตอุปกรณ์ที่มีวัตถุประสงค์พิเศษ จะต้องมีกำไรน้อยที่สุด 5.1 ผลงานที่เกี่ยวข้อง โปรโตคอล Bitcoin proof-of-work ดั้งเดิมใช้ฟังก์ชันการกำหนดราคาที่เน้น CPU SHA-256 โดยส่วนใหญ่ประกอบด้วยตัวดำเนินการเชิงตรรกะขั้นพื้นฐานและอาศัยความเร็วในการคำนวณเท่านั้น โปรเซสเซอร์จึงเหมาะอย่างยิ่งสำหรับการใช้งานแบบมัลติคอร์/สายพานลำเลียง อย่างไรก็ตาม คอมพิวเตอร์สมัยใหม่ไม่ได้ถูกจำกัดด้วยจำนวนการทำงานต่อวินาทีเพียงอย่างเดียว แต่ยังตามขนาดหน่วยความจำด้วย แม้ว่าโปรเซสเซอร์บางตัวอาจเร็วกว่าตัวประมวลผลอื่นอย่างมาก [8] ขนาดหน่วยความจำมีโอกาสน้อยที่จะแตกต่างกันระหว่างเครื่อง ฟังก์ชันราคาที่ผูกกับหน่วยความจำถูกนำมาใช้ครั้งแรกโดย Abadi และคณะ และถูกกำหนดให้เป็น “ฟังก์ชันที่เวลาในการคำนวณถูกครอบงำโดยเวลาที่ใช้ในการเข้าถึงหน่วยความจำ” [15] แนวคิดหลักคือการสร้างอัลกอริทึมที่จัดสรรบล็อกข้อมูลขนาดใหญ่ (“scratchpad”) ภายในหน่วยความจำที่สามารถเข้าถึงได้ค่อนข้างช้า (เช่น RAM) และ "การเข้าถึงไฟล์ ลำดับตำแหน่งที่คาดเดาไม่ได้” ภายในนั้น บล็อกควรมีขนาดใหญ่พอที่จะเก็บรักษาได้ ข้อมูลที่ได้เปรียบมากกว่าการคำนวณใหม่สำหรับการเข้าถึงแต่ละครั้ง อัลกอริทึมก็ควรเช่นกัน ป้องกันการขนานภายใน ดังนั้นเธรดพร้อมกัน N ควรต้องใช้หน่วยความจำเพิ่มขึ้น N เท่า ในครั้งเดียว Dwork และคณะ [22] ตรวจสอบและทำให้แนวทางนี้เป็นทางการ ซึ่งทำให้พวกเขาเสนอแนะแนวทางอื่น ตัวแปรของฟังก์ชันการกำหนดราคา: "Mbound" อีกหนึ่งงานเป็นของ F. Coelho [20] ใคร 11 การทำธุรกรรม อินพุต TX เอาท์พุต0 . . . เอาท์พุต . . . เอาท์พุต รูปภาพที่สำคัญ ลายเซ็น ลายเซ็นต์แหวน กุญแจปลายทาง เอาท์พุต1 กุญแจปลายทาง เอาท์พุต ธุรกรรมต่างประเทศ เอาต์พุตของผู้ส่ง กุญแจปลายทาง คู่กุญแจแบบครั้งเดียว ครั้งเดียว รหัสส่วนตัว ผม = xHp(P) พี,เอ็กซ์ รูปที่ 7 การสร้างลายเซ็น Ring ในธุรกรรมมาตรฐาน 5 หลักฐานการทำงานที่เท่าเทียมกัน ในส่วนนี้เราขอเสนอและวางอัลกอริทึม proof-of-work ใหม่ เป้าหมายหลักของเรา คือการปิดช่องว่างระหว่าง CPU (ส่วนใหญ่) และ GPU/FPGA/ASIC (ชนกลุ่มน้อย) ผู้ขุด มันคือ เหมาะสมที่ผู้ใช้บางคนสามารถมีข้อได้เปรียบเหนือผู้อื่นได้ แต่การลงทุนของพวกเขา ควรจะเติบโตอย่างน้อยเป็นเส้นตรงตามกำลัง โดยทั่วไปแล้ว การผลิตอุปกรณ์ที่มีวัตถุประสงค์พิเศษ จะต้องมีกำไรน้อยที่สุด 5.1 ผลงานที่เกี่ยวข้อง โปรโตคอล Bitcoin proof-of-work ดั้งเดิมใช้ฟังก์ชันการกำหนดราคาที่เน้น CPU SHA-256 โดยส่วนใหญ่ประกอบด้วยตัวดำเนินการเชิงตรรกะขั้นพื้นฐานและอาศัยความเร็วในการคำนวณเท่านั้น โปรเซสเซอร์จึงเหมาะอย่างยิ่งสำหรับการใช้งานแบบมัลติคอร์/สายพานลำเลียง อย่างไรก็ตาม คอมพิวเตอร์สมัยใหม่ไม่ได้ถูกจำกัดด้วยจำนวนการทำงานต่อวินาทีเพียงอย่างเดียว แต่ยังตามขนาดหน่วยความจำด้วย แม้ว่าโปรเซสเซอร์บางตัวอาจเร็วกว่าโปรเซสเซอร์ตัวอื่นอย่างมาก [8] ขนาดหน่วยความจำมีโอกาสน้อยที่จะแตกต่างกันระหว่างเครื่อง ฟังก์ชันราคาที่ผูกกับหน่วยความจำถูกนำมาใช้ครั้งแรกโดย Abadi และคณะ และถูกกำหนดให้เป็น “ฟังก์ชันที่เวลาในการคำนวณถูกครอบงำโดยเวลาที่ใช้ในการเข้าถึงหน่วยความจำ” [15] แนวคิดหลักคือการสร้างอัลกอริทึมที่จัดสรรบล็อกข้อมูลขนาดใหญ่ (“scratchpad”) ภายในหน่วยความจำที่สามารถเข้าถึงได้ค่อนข้างช้า (เช่น RAM) และ "การเข้าถึงไฟล์ ลำดับตำแหน่งที่คาดเดาไม่ได้” ภายในนั้น บล็อกควรมีขนาดใหญ่พอที่จะเก็บรักษาได้ ข้อมูลที่ได้เปรียบมากกว่าการคำนวณใหม่สำหรับการเข้าถึงแต่ละครั้ง อัลกอริทึมก็ควรเช่นกัน ป้องกันการขนานภายใน ดังนั้นเธรดพร้อมกัน N ควรต้องใช้หน่วยความจำเพิ่มขึ้น N เท่า ในครั้งเดียว Dwork และคณะ [22] ตรวจสอบและทำให้แนวทางนี้เป็นทางการ ทำให้พวกเขาเสนอแนะแนวทางอื่น ตัวแปรของฟังก์ชันการกำหนดราคา: "Mbound" อีกหนึ่งงานเป็นของ F. Coelho [20] ใคร 11 21 เห็นได้ชัดว่านี่คือ UTXO's ของเรา: จำนวนและคีย์ปลายทาง หาก Alex เป็นคนสร้างธุรกรรมมาตรฐานนี้และส่งไปให้ Bob แสดงว่า Alex ก็มีคีย์ส่วนตัวเช่นกัน ในแต่ละสิ่งเหล่านี้ ฉันชอบไดอะแกรมนี้มาก เพราะมันตอบคำถามก่อนหน้านี้บางข้อ อินพุต Txn ประกอบด้วย ของชุดเอาต์พุต Txn และ keรูปภาพของคุณ จากนั้นจะมีการลงนามด้วยลายเซ็นแหวนรวมทั้งทั้งหมด ของคีย์ส่วนตัวที่ Alex เป็นเจ้าของธุรกรรมต่างประเทศทั้งหมดที่รวมอยู่ในข้อตกลง ที่ เอาต์พุต Txn ประกอบด้วยจำนวนเงินและคีย์ปลายทาง ผู้รับรายการอาจ หากต้องการ ให้สร้างคีย์ส่วนตัวแบบครั้งเดียวตามที่อธิบายไว้ก่อนหน้าในรายงานเพื่อใช้จ่าย เงิน คงจะน่ายินดีที่ได้ทราบว่าสิ่งนี้ตรงกับโค้ดจริงมากน้อยเพียงใด... ไม่ Nic van Saberhagen อธิบายคุณสมบัติบางอย่างของอัลกอริธึมการพิสูจน์การทำงานอย่างหลวมๆ โดยไม่ได้อธิบายอัลกอริทึมนั้นจริงๆ อัลกอริธึม CryptoNight นั้นจำเป็นต้องมีการวิเคราะห์เชิงลึก เมื่อฉันอ่านสิ่งนี้ฉันก็พูดติดอ่าง การลงทุนควรเติบโตอย่างน้อยเชิงเส้นตามกำลังหรือควร การลงทุนเติบโต สูงสุด เป็นเส้นตรงด้วยพลังใช่ไหม? แล้วฉันก็ตระหนักได้ว่า ฉันในฐานะคนขุดแร่หรือนักลงทุน มักจะคิดว่า "ฉันจะได้รับพลังงานได้มากเพียงใด เพื่อการลงทุน?” ไม่ใช่ "ต้องลงทุนเท่าไหร่ถึงจะได้พลังงานที่แน่นอน" แน่นอน แสดงว่าการลงทุนโดย I และกำลังโดย P ถ้า I(P) คือการลงทุนในรูปของกำลัง และ P(I) คือกำลังที่เป็นหน้าที่ของการลงทุน พวกมันจะผกผันกัน (ไม่ว่าจะอยู่ที่ใดก็ตาม ผกผันสามารถมีได้) และถ้า I(P) เร็วกว่าเชิงเส้น มากกว่า P(I) ก็จะช้ากว่าเชิงเส้น ดังนั้น จะมีอัตราผลตอบแทนลดลงสำหรับผู้ลงทุน กล่าวคือสิ่งที่ผู้เขียนพูดในที่นี้ก็คือ "แน่นอน เมื่อคุณลงทุนมากขึ้น คุณก็จะได้รับมากขึ้น" อำนาจ แต่เราควรพยายามทำให้อัตราผลตอบแทนลดลง" การลงทุนของ CPU จะจำกัดขอบเขตย่อยเชิงเส้นในที่สุด คำถามก็คือว่าผู้เขียน ได้ออกแบบอัลกอริธึม POW ที่จะบังคับให้ ASIC ทำเช่นนี้ด้วย "สกุลเงินในอนาคต" สมมุติควรขุดด้วยทรัพยากรที่ช้าที่สุด/จำกัดที่สุดเสมอหรือไม่ บทความโดย Abadi และคณะ (ซึ่งมีวิศวกรของ Google และ Microsoft บางคนเป็นผู้เขียน) คือ โดยพื้นฐานแล้วโดยใช้ความจริงที่ว่าขนาดหน่วยความจำ ในช่วงไม่กี่ปีที่ผ่านมา มีขนาดเล็กลงมาก ความแปรปรวนในเครื่องต่างๆ มากกว่าความเร็วของโปรเซสเซอร์ และมีอัตราส่วนการลงทุนต่อกำลังที่มากกว่าเชิงเส้น อีกไม่กี่ปีอาจต้องประเมินใหม่! ทุกอย่างคือการแข่งขันทางอาวุธ... การสร้างฟังก์ชัน hash เป็นเรื่องยาก การสร้างฟังก์ชัน hash ที่เป็นไปตามข้อจำกัดเหล่านี้ดูเหมือนจะยากกว่า บทความนี้ดูเหมือนจะไม่มีคำอธิบายเกี่ยวกับความเป็นจริง hashing อัลกอริทึม CryptoNight ฉันคิดว่ามันเป็นการใช้งาน SHA-3 ที่ต้องใช้หน่วยความจำอย่างหนัก ในโพสต์ในฟอรัม แต่ฉันไม่รู้... และนั่นคือประเด็น มันจะต้องอธิบาย
เสนอวิธีแก้ปัญหาที่มีประสิทธิภาพสูงสุด: “ฮอกไกโด” สำหรับความรู้ของเรา งานล่าสุดที่มีพื้นฐานอยู่บนแนวคิดของการค้นหาแบบสุ่มหลอกในอาเรย์ขนาดใหญ่คือ อัลกอริธึมที่เรียกว่า “scrypt” โดย C. Percival [32] ต่างจากฟังก์ชั่นก่อนหน้านี้ที่เน้นไปที่ แหล่งที่มาของคีย์ และไม่ใช่ระบบ proof-of-work แม้ว่าข้อเท็จจริงนี้ scrypt สามารถตอบสนองวัตถุประสงค์ของเราได้: มันทำงานได้ดีเป็นฟังก์ชันการกำหนดราคาในปัญหาการแปลง hash บางส่วน เช่น SHA-256 ใน Bitcoin. ถึงตอนนี้ scrypt ได้ถูกนำไปใช้ใน Litecoin [14] และ Bitcoin forks อื่นๆ แล้ว อย่างไรก็ตาม การใช้งานนั้นไม่ได้ผูกกับหน่วยความจำจริงๆ: อัตราส่วน "เวลาในการเข้าถึงหน่วยความจำ/โดยรวม time” ไม่เพียงพอ เนื่องจากแต่ละอินสแตนซ์ใช้พื้นที่เพียง 128 KB สิ่งนี้อนุญาตให้นักขุด GPU ให้มีประสิทธิภาพมากขึ้นประมาณ 10 เท่า และยังคงทิ้งความเป็นไปได้ในการสร้างสรรค์ไว้ค่อนข้างมาก อุปกรณ์ขุดเหมืองราคาถูกแต่มีประสิทธิภาพสูง นอกจากนี้ โครงสร้างการเข้ารหัสยังช่วยให้สามารถแลกเปลี่ยนขนาดหน่วยความจำเป็นเส้นตรงและ ความเร็วของ CPU เนื่องจากทุกบล็อกใน scratchpad นั้นได้มาจากบล็อกก่อนหน้าเท่านั้น ตัวอย่างเช่น คุณสามารถจัดเก็บบล็อกทุก ๆ วินาทีและคำนวณบล็อกอื่น ๆ ในลักษณะขี้เกียจได้ เช่น เท่านั้น เมื่อจำเป็น ดัชนีสุ่มหลอกจะถือว่ามีการกระจายอย่างสม่ำเสมอ ดังนั้นค่าที่คาดหวังของการคำนวณใหม่ของบล็อกเพิ่มเติมคือ 1 \(2 \cdot N\) โดยที่ N คือตัวเลข ของการวนซ้ำ เวลาคำนวณโดยรวมเพิ่มขึ้นน้อยกว่าครึ่งเพราะยังมี การดำเนินการที่ไม่ขึ้นอยู่กับเวลา (เวลาคงที่) เช่น การเตรียมแผ่นรอยขีดข่วนและ hashing on การวนซ้ำทุกครั้ง ประหยัด 2/3 ของต้นทุนหน่วยความจำ 1 3 \(\cdot\) ยังไม่มี + 1 3 \(\cdot\) \(2 \cdot N\) = N การคำนวณใหม่เพิ่มเติม ผล 9/10 เข้า 1 10 \(\cdot\) ยังไม่มี + . . . +1 10 \(\cdot\) 9 \(\cdot\) ยังไม่มีข้อความ = 4.5N. มันง่ายที่จะแสดงให้เห็นว่าการจัดเก็บเพียง 1 ของบล็อกทั้งหมด เพิ่มเวลาน้อยกว่าปัจจัยของ s−1 2. นี่หมายถึงเครื่องที่มี CPU เร็วกว่าชิปสมัยใหม่ถึง 200 เท่า สามารถจัดเก็บ scratchpad ได้เพียง 320 ไบต์ 5.2 อัลกอริธึมที่นำเสนอ เราขอเสนออัลกอริธึมที่ผูกกับหน่วยความจำใหม่สำหรับฟังก์ชันการกำหนดราคา proof-of-work มันขึ้นอยู่กับ การเข้าถึงหน่วยความจำช้าแบบสุ่มและเน้นการพึ่งพาเวลาแฝง ตรงข้ามกับการเข้ารหัสทุกครั้ง บล็อกใหม่ (ความยาว 64 ไบต์) ขึ้นอยู่กับบล็อกก่อนหน้าทั้งหมด จึงเกิดเรื่องสมมุติขึ้นมา “โปรแกรมรักษาหน่วยความจำ” ควรเพิ่มความเร็วในการคำนวณแบบทวีคูณ อัลกอริทึมของเราต้องการประมาณ 2 Mb ต่ออินสแตนซ์ด้วยเหตุผลต่อไปนี้: 1. พอดีกับแคช L3 (ต่อคอร์) ของโปรเซสเซอร์สมัยใหม่ ซึ่งควรจะกลายเป็นกระแสหลัก ในอีกไม่กี่ปี; 2. หน่วยความจำภายในหนึ่งเมกะไบต์เป็นขนาดที่แทบจะยอมรับไม่ได้สำหรับไปป์ไลน์ ASIC สมัยใหม่ 3. GPU อาจเรียกใช้อินสแตนซ์หลายร้อยอินสแตนซ์พร้อมกัน แต่ถูกจำกัดด้วยวิธีอื่น: หน่วยความจำ GDDR5 ช้ากว่าแคช CPU L3 และน่าทึ่งในเรื่องแบนด์วิธด้วย ความเร็วในการเข้าถึงแบบสุ่ม 4. การขยาย Scratchpad อย่างมีนัยสำคัญจะต้องมีการวนซ้ำเพิ่มขึ้น ซึ่งใน เทิร์นหมายถึงการเพิ่มเวลาโดยรวม การโทร "หนัก" ในเครือข่าย p2p ที่ไม่น่าเชื่อถืออาจนำไปสู่ ช่องโหว่ร้ายแรง เนื่องจากโหนดจำเป็นต้องตรวจสอบ proof-of-work ของทุกบล็อกใหม่ หากโหนดใช้เวลาเป็นจำนวนมากในการประเมิน hash แต่ละครั้ง ก็สามารถดำเนินการได้อย่างง่ายดาย DDoSed โดยวัตถุปลอมมากมายพร้อมข้อมูลงานที่กำหนดเอง (ค่า nonce) 12 เสนอวิธีแก้ปัญหาที่มีประสิทธิภาพสูงสุด: “ฮอกไกโด” สำหรับความรู้ของเรา งานล่าสุดที่มีพื้นฐานอยู่บนแนวคิดของการค้นหาแบบสุ่มหลอกในอาเรย์ขนาดใหญ่คือ อัลกอริธึมที่เรียกว่า “scrypt” โดย C. Percival [32] ต่างจากฟังก์ชั่นก่อนหน้านี้ที่เน้นไปที่ แหล่งที่มาของคีย์ และไม่ใช่ระบบ proof-of-work แม้ว่าข้อเท็จจริงนี้ scrypt สามารถตอบสนองวัตถุประสงค์ของเราได้: มันทำงานได้ดีเป็นฟังก์ชันการกำหนดราคาในปัญหาการแปลง hash บางส่วน เช่น SHA-256 ใน Bitcoin. ถึงตอนนี้ scrypt ได้ถูกนำไปใช้ใน Litecoin [14] และ Bitcoin forks อื่นๆ แล้ว อย่างไรก็ตาม การใช้งานนั้นไม่ได้ผูกกับหน่วยความจำจริงๆ: อัตราส่วน "เวลาในการเข้าถึงหน่วยความจำ / โดยรวม time” ไม่เพียงพอ เนื่องจากแต่ละอินสแตนซ์ใช้พื้นที่เพียง 128 KB สิ่งนี้อนุญาตให้นักขุด GPU ให้มีประสิทธิภาพมากขึ้นประมาณ 10 เท่า และยังคงทิ้งความเป็นไปได้ในการสร้างสรรค์ไว้ค่อนข้างมาก อุปกรณ์ขุดเหมืองราคาถูกแต่มีประสิทธิภาพสูง นอกจากนี้ โครงสร้างการเข้ารหัสยังช่วยให้สามารถแลกเปลี่ยนขนาดหน่วยความจำเป็นเส้นตรงและ ความเร็วของ CPU เนื่องจากทุกบล็อกใน scratchpad นั้นได้มาจากบล็อกก่อนหน้าเท่านั้น ตัวอย่างเช่น คุณสามารถจัดเก็บบล็อกทุก ๆ วินาทีและคำนวณบล็อกอื่น ๆ ในลักษณะขี้เกียจได้ เช่น เท่านั้น เมื่อจำเป็น ดัชนีสุ่มหลอกจะถือว่ามีการกระจายอย่างสม่ำเสมอ ดังนั้นค่าที่คาดหวังของการคำนวณใหม่ของบล็อกเพิ่มเติมคือ 1 \(2 \cdot N\) โดยที่N คือตัวเลข ของการวนซ้ำ เวลาคำนวณโดยรวมเพิ่มขึ้นน้อยกว่าครึ่งเพราะยังมี การดำเนินการที่ไม่ขึ้นอยู่กับเวลา (เวลาคงที่) เช่น การเตรียมแผ่นรอยขีดข่วนและ hashing on การวนซ้ำทุกครั้ง ประหยัด 2/3 ของต้นทุนหน่วยความจำ 1 3 \(\cdot\) ยังไม่มี + 1 3 \(\cdot\) \(2 \cdot N\) = N การคำนวณใหม่เพิ่มเติม ผล 9/10 เข้า 1 10 \(\cdot\) ยังไม่มี + . . . +1 10 \(\cdot\) 9 \(\cdot\) ยังไม่มีข้อความ = 4.5N. มันง่ายที่จะแสดงให้เห็นว่าการจัดเก็บเพียง 1 ของบล็อกทั้งหมด เพิ่มเวลาน้อยกว่าปัจจัยของ s−1 2. นี่หมายถึงเครื่องที่มี CPU เร็วกว่าชิปสมัยใหม่ถึง 200 เท่า สามารถจัดเก็บ scratchpad ได้เพียง 320 ไบต์ 5.2 อัลกอริธึมที่นำเสนอ เราขอเสนออัลกอริธึมที่ผูกกับหน่วยความจำใหม่สำหรับฟังก์ชันการกำหนดราคา proof-of-work มันขึ้นอยู่กับ การเข้าถึงหน่วยความจำช้าแบบสุ่มและเน้นการพึ่งพาเวลาแฝง ตรงข้ามกับการเข้ารหัสทุกครั้ง บล็อกใหม่ (ความยาว 64 ไบต์) ขึ้นอยู่กับบล็อกก่อนหน้าทั้งหมด จึงเกิดเรื่องสมมุติขึ้นมา “โปรแกรมรักษาหน่วยความจำ” ควรเพิ่มความเร็วในการคำนวณแบบทวีคูณ อัลกอริทึมของเราต้องการประมาณ 2 Mb ต่ออินสแตนซ์ด้วยเหตุผลต่อไปนี้: 1. พอดีกับแคช L3 (ต่อคอร์) ของโปรเซสเซอร์สมัยใหม่ ซึ่งควรจะกลายเป็นกระแสหลัก ในอีกไม่กี่ปี; 2. หน่วยความจำภายในหนึ่งเมกะไบต์เป็นขนาดที่แทบจะยอมรับไม่ได้สำหรับไปป์ไลน์ ASIC สมัยใหม่ 3. GPU อาจเรียกใช้อินสแตนซ์หลายร้อยอินสแตนซ์พร้อมกัน แต่ถูกจำกัดด้วยวิธีอื่น: หน่วยความจำ GDDR5 ช้ากว่าแคช CPU L3 และน่าทึ่งในเรื่องแบนด์วิธด้วย ความเร็วในการเข้าถึงแบบสุ่ม 4. การขยาย Scratchpad อย่างมีนัยสำคัญจะต้องมีการวนซ้ำเพิ่มขึ้น ซึ่งใน เทิร์นหมายถึงการเพิ่มเวลาโดยรวม การโทร "หนัก" ในเครือข่าย p2p ที่ไม่น่าเชื่อถืออาจนำไปสู่ ช่องโหว่ร้ายแรง เนื่องจากโหนดจำเป็นต้องตรวจสอบ proof-of-work ของทุกบล็อกใหม่ หากโหนดใช้เวลาเป็นจำนวนมากในการประเมิน hash แต่ละครั้ง ก็สามารถดำเนินการได้อย่างง่ายดาย DDoSed โดยวัตถุปลอมมากมายพร้อมข้อมูลงานที่กำหนดเอง (ค่า nonce) 12 22 ไม่เป็นไร มันเป็นเหรียญเข้ารหัสเหรอ? อัลกอริธึมอยู่ที่ไหน? ทั้งหมดที่ฉันเห็นคือโฆษณา นี่คือจุดที่ Cryptonote หากอัลกอริธึม PoW ของพวกเขาคุ้มค่า ก็จะโดดเด่นขึ้นมาจริงๆ มันไม่ใช่ จริงๆ SHA-256 มันไม่ใช่การเข้ารหัสจริงๆ เป็นสิ่งใหม่ หน่วยความจำที่ถูกผูกไว้ และไม่เรียกซ้ำ
6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน จัดการกับการแลกเปลี่ยนระหว่างต้นทุนและกำไรจากค่าธรรมเนียมให้สมดุลและกำหนดด้วยตนเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน เกี่ยวข้องกับการแลกเปลี่ยนระหว่างความสมดุลe ต้นทุนและกำไรจากค่าธรรมเนียมและกำหนดของเขาเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 23 หน่วยอะตอม ฉันชอบแบบนั้น นี่เทียบเท่ากับ Satoshis หรือไม่? หากเป็นเช่นนั้น นั่นหมายความว่าจะมี cryptonote อยู่ที่ 185 พันล้าน ฉันรู้ว่าในที่สุดแล้วสิ่งนี้จะต้องได้รับการปรับแต่งในไม่กี่หน้า หรืออาจมีการพิมพ์ผิด หากรางวัลพื้นฐานคือ "เหรียญที่เหลือทั้งหมด" มีเพียงบล็อกเดียวเท่านั้นที่จะสามารถรับเหรียญทั้งหมดได้ อินสตามีน. ในทางกลับกัน หากนี่ควรจะเป็นสัดส่วนไม่ทางใดก็ทางหนึ่ง ความแตกต่างในเวลาระหว่างปัจจุบันและวันที่สิ้นสุดการผลิตเหรียญบางรายการ? นั่นก็จะ สมเหตุสมผล นอกจากนี้ ในโลกของฉัน สองสัญลักษณ์ที่ยิ่งใหญ่กว่าเช่นนี้หมายถึง "ยิ่งใหญ่กว่ามาก" ผู้เขียนทำ อาจหมายถึงอย่างอื่นใช่ไหม? หากการปรับตัวต่อความยากลำบากเกิดขึ้นทุกๆ บล็อก ผู้โจมตีก็อาจมีฟาร์มขนาดใหญ่มาก เครื่องจักรขุดและขุดตามช่วงเวลาที่เลือกอย่างระมัดระวัง สิ่งนี้อาจทำให้เกิดการระเบิดวุ่นวาย (หรือความผิดพลาดจนเหลือศูนย์) ในความยากลำบาก หากสูตรการปรับความยากลำบากไม่ได้รับการหน่วงอย่างเหมาะสม ไม่ต้องสงสัยเลยว่าวิธีการของ Bitcoin นั้นไม่เหมาะสมสำหรับการคำนวณใหม่อย่างรวดเร็ว แต่เป็นแนวคิดเรื่องความเฉื่อย ในระบบเหล่านี้จะต้องได้รับการพิสูจน์ ไม่ใช่ถูกมองข้าม นอกจากนี้การแกว่ง ในความยากลำบากของเครือข่ายไม่จำเป็นต้องเป็นปัญหา เว้นแต่จะส่งผลให้เกิดความผันผวนที่เห็นได้ชัด การจัดหาเหรียญ - และการมีปัญหาที่เปลี่ยนแปลงอย่างรวดเร็วอาจทำให้เกิด "การแก้ไขมากเกินไป" เวลาที่ใช้โดยเฉพาะในช่วงเวลาสั้นๆ เช่น ไม่กี่นาที จะเป็นสัดส่วนกับ "ผลรวม จำนวนบล็อกที่สร้างขึ้นบนเครือข่าย" ค่าคงที่ของสัดส่วนก็จะเติบโตขึ้นด้วยตัวมันเอง เมื่อเวลาผ่านไป น่าจะเป็นแบบทวีคูณหาก CN ปิดกิจการ อาจเป็นความคิดที่ดีกว่าที่จะปรับความยากเพื่อเก็บ "บล็อกทั้งหมดที่สร้างขึ้นใน เครือข่ายตั้งแต่บล็อกสุดท้ายถูกเพิ่มเข้าไปในเชนหลัก" ภายในค่าคงที่บางส่วนหรือด้วย การแปรผันที่มีขอบเขตหรืออะไรทำนองนั้น ถ้าเป็นอัลกอริธึมแบบปรับตัวที่มีการคำนวณ สามารถกำหนดได้ว่านำไปปฏิบัติได้ง่ายซึ่งดูเหมือนจะช่วยแก้ปัญหาได้ แต่ถ้าเราใช้วิธีการนั้น ผู้ที่มีฟาร์มขุดขนาดใหญ่ก็สามารถปิดฟาร์มของตนได้ สักสองสามชั่วโมงแล้วเปิดใหม่อีกครั้ง ในช่วงสองสามช่วงตึกแรก ฟาร์มนั้นจะสร้าง ธนาคาร ดังนั้น จริงๆ แล้ว วิธีการนี้จะนำมาซึ่งจุดที่น่าสนใจ: การขุดกลายเป็น (โดยเฉลี่ย) แพ้เกมโดยไม่มี ROI โดยเฉพาะอย่างยิ่งเมื่อมีผู้คนกระโดดเข้าสู่เครือข่ายมากขึ้น หากเกิดความยุ่งยากในการขุด เครือข่ายที่มีการติดตามอย่างใกล้ชิดมาก hashrate ฉันสงสัยว่าผู้คนจะขุดได้มากเท่ากับพวกเขา กำลังทำอยู่ หรือในทางกลับกัน แทนที่จะให้ฟาร์มขุดเปิดตลอด 24 ชั่วโมงทุกวัน พวกเขาอาจเปลี่ยนมัน เปิดเป็นเวลา 6 ชั่วโมง ปิดเป็นเวลา 2 เปิดเป็นเวลา 6 ชั่วโมง ปิดเป็นเวลา 2 หรืออะไรทำนองนั้น เพียงเปลี่ยนไปใช้เหรียญอื่น สองสามชั่วโมง รอให้ความยากลดลง จากนั้นค่อยกลับมาลุยต่อเพื่อรับส่วนพิเศษเหล่านั้น บล็อกความสามารถในการทำกำไรเมื่อเครือข่ายปรับตัว และคุณรู้อะไรไหม? นี่คงจะเป็นอย่างนั้นจริงๆ หนึ่งในสถานการณ์การขุดที่ดีกว่าที่ฉันคำนึงถึง... นี่อาจเป็นวงกลม แต่ถ้าเวลาในการสร้างบล็อก เฉลี่ย ประมาณหนึ่งนาที เราก็สามารถทำได้ ใช้จำนวนบล็อกเป็นพร็อกซีสำหรับ "เวลาที่ใช้ไป"
6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน จัดการกับการแลกเปลี่ยนระหว่างต้นทุนและกำไรจากค่าธรรมเนียมให้สมดุลและกำหนดด้วยตนเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน เกี่ยวข้องกับการแลกเปลี่ยนระหว่างความสมดุลe ต้นทุนและกำไรจากค่าธรรมเนียมและกำหนดของเขาเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 24 เอาล่ะ เรามี blockchain และแต่ละบล็อกมีการประทับเวลา นอกเหนือจากนั้น สั่ง สิ่งนี้ถูกแทรกไว้อย่างชัดเจนเพื่อการปรับเปลี่ยนความยากเนื่องจากการประทับเวลา เชื่อถือไม่ได้มากดังที่กล่าวไปแล้ว เราได้รับอนุญาตให้มีการประทับเวลาที่ขัดแย้งกันในห่วงโซ่หรือไม่ หาก Block A มาก่อน Block B ในห่วงโซ่ และทุกอย่างสอดคล้องกันในแง่ของการเงิน แต่ดูเหมือนว่า Block A จะถูกสร้างขึ้นหลังจาก Block B? เพราะบางทีอาจมีคนเป็นเจ้าของ ส่วนใหญ่ของเครือข่าย? ไม่เป็นไรใช่ไหม? อาจเป็นเพราะการเงินไม่ได้ถูกหลอก โอเค ฉันเกลียดกฎเกณฑ์นี้ "มีเพียง 80% ของบล็อกที่ถูกต้องตามกฎหมายสำหรับหลัก blockchain" วิธีการ มีจุดประสงค์เพื่อป้องกันไม่ให้คนโกหกปรับแต่งการประทับเวลาของตนหรือไม่ แต่ตอนนี้มันเพิ่ม สิ่งจูงใจให้ทุกคนโกหกเรื่องการประทับเวลาและเลือกค่ามัธยฐาน กรุณากำหนด. ความหมาย "สำหรับบล็อกนี้ให้รวมเฉพาะธุรกรรมที่รวมค่าธรรมเนียมมากกว่าเท่านั้น มากกว่า p% โดยเฉพาะอย่างยิ่งมีค่าธรรมเนียมมากกว่า 2p%" หรืออะไรทำนองนั้น พวกเขาหมายถึงอะไรโดยหลอกลวง? หากการทำธุรกรรมสอดคล้องกับประวัติที่ผ่านมาของ blockchain และการทำธุรกรรมรวมค่าธรรมเนียมที่นักขุดพึงพอใจ ยังไม่เพียงพอหรือ? เอาละ ไม่ ไม่จำเป็น หากไม่มีขนาดบล็อกสูงสุด ก็ไม่มีอะไรที่จะเก็บผู้ใช้ที่เป็นอันตรายได้ จากการอัปโหลดธุรกรรมจำนวนมหาศาลถึงตัวเขาในคราวเดียวเพื่อทำให้ช้าลง เครือข่าย กฎหลักสำหรับขนาดบล็อกสูงสุดจะป้องกันไม่ให้ผู้คนใส่ขยะจำนวนมหาศาล ข้อมูลบน blockchain ทั้งหมดพร้อมกันเพื่อทำให้สิ่งต่างๆ ช้าลง แต่ต้องมีกฎดังกล่าวอย่างแน่นอน ปรับตัว เช่น ในช่วงเทศกาลคริสต์มาส การจราจรจะติดขัด และ ขนาดบล็อกจะใหญ่มากและหลังจากนั้นทันทีเพื่อให้ขนาดบล็อกลดลงในภายหลัง อีกครั้ง ดังนั้นเราจึงต้องมี a) หมวกแบบปรับได้บางประเภท หรือ b) หมวกที่ใหญ่เพียงพอถึง 99% ยอดเขาคริสต์มาสที่สมเหตุสมผลไม่ทำให้หมวกแตก แน่นอนว่าอันที่สองนั้นเป็นไปไม่ได้ การประมาณการ - ใครจะรู้ว่าสกุลเงินจะปรับตัวทันหรือไม่? ดีกว่าที่จะปรับตัวและไม่ต้องกังวล เกี่ยวกับมัน แต่แล้วเราก็มีปัญหาเกี่ยวกับทฤษฎีการควบคุม: จะทำให้สิ่งนี้ปรับตัวได้อย่างไรโดยไม่ต้อง ช่องโหว่ในการโจมตีหรือการแกว่งอย่างดุเดือดและบ้าคลั่ง? สังเกตว่าวิธีการปรับเปลี่ยนไม่ได้หยุดผู้ใช้ที่เป็นอันตรายจากการสะสมจำนวนเล็กน้อย ของข้อมูลขยะเมื่อเวลาผ่านไปบน blockchain ทำให้เกิดการขยายตัวในระยะยาว นี่เป็นปัญหาที่แตกต่าง โดยรวมแล้วเหรียญ cryptonote มีปัญหาร้ายแรงด้วย
6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน จัดการกับการแลกเปลี่ยนระหว่างต้นทุนและกำไรจากค่าธรรมเนียมให้สมดุลและกำหนดด้วยตนเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 6 ข้อดีเพิ่มเติม 6.1 การปล่อยก๊าซเรือนกระจกที่ราบรื่น ขอบเขตบนสำหรับจำนวนเหรียญดิจิทัล CryptoNote ทั้งหมดคือ: MSupply = 264 −1 หน่วยอะตอม นี่เป็นข้อจำกัดตามธรรมชาติที่ขึ้นอยู่กับขีดจำกัดในการดำเนินการเท่านั้น ไม่ใช่จากสัญชาตญาณ เช่น “เหรียญ N น่าจะเพียงพอสำหรับทุกคน” เพื่อให้มั่นใจถึงความราบรื่นของกระบวนการปล่อยก๊าซเรือนกระจก เราใช้สูตรต่อไปนี้สำหรับบล็อก รางวัล: รางวัลฐาน = (MSupply -A) ≫18, โดยที่ A คือจำนวนเหรียญที่สร้างขึ้นก่อนหน้านี้ 6.2 พารามิเตอร์ที่ปรับได้ 6.2.1 ความยากลำบาก CryptoNote มีอัลกอริธึมการกำหนดเป้าหมายซึ่งเปลี่ยนความยากของทุกบล็อก นี้ ลดเวลาตอบสนองของระบบเมื่อเครือข่าย hashrate มีการเติบโตหรือลดลงอย่างมาก รักษาอัตราการบล็อกให้คงที่ เมธอด Bitcoin ดั้งเดิมจะคำนวณความสัมพันธ์ของค่าจริง และช่วงเวลาเป้าหมายระหว่างบล็อกปี 2559 ล่าสุด และใช้เป็นตัวคูณสำหรับปัจจุบัน ความยากลำบาก แน่นอนว่าสิ่งนี้ไม่เหมาะสำหรับการคำนวณใหม่อย่างรวดเร็ว (เนื่องจากมีความเฉื่อยมาก) และ ส่งผลให้เกิดความสั่นสะเทือน แนวคิดทั่วไปเบื้องหลังอัลกอริธึมของเราคือการรวมงานทั้งหมดที่โหนดและทำเสร็จแล้ว แบ่งตามเวลาที่พวกเขาใช้ไป การวัดงานคือค่าความยากที่สอดคล้องกัน ในแต่ละบล็อก แต่เนื่องจากการประทับเวลาที่ไม่ถูกต้องและไม่น่าเชื่อถือ เราจึงไม่สามารถระบุเวลาที่แน่ชัดได้ ช่วงเวลาระหว่างบล็อก ผู้ใช้สามารถเปลี่ยนการประทับเวลาของเขาไปสู่อนาคตและครั้งต่อไปได้ ช่วงเวลาอาจจะน้อยหรือเป็นลบอย่างไม่น่าเชื่อ คงจะเกิดเหตุไม่น้อย. ประเภทนี้ เราจึงสามารถจัดเรียงการประทับเวลาและตัดค่าผิดปกติได้ (เช่น 20%) ช่วงของ ค่าที่เหลือคือเวลาที่ใช้ไป 80% ของบล็อกที่เกี่ยวข้อง 6.2.2 ขีดจำกัดขนาด ผู้ใช้ชำระค่าจัดเก็บ blockchain และจะมีสิทธิ์โหวตตามขนาดของมัน นักขุดทุกคน เกี่ยวข้องกับการแลกเปลี่ยนระหว่างความสมดุลe ต้นทุนและกำไรจากค่าธรรมเนียมและกำหนดของเขาเอง “soft-limit” สำหรับการสร้างบล็อก กฎหลักสำหรับขนาดบล็อกสูงสุดก็จำเป็นเช่นกัน ป้องกันไม่ให้ blockchain ถูกน้ำท่วมด้วยธุรกรรมปลอม อย่างไรก็ตาม ค่านี้ควร ไม่ต้องฮาร์ดโค้ด ให้ MN เป็นค่ามัธยฐานของขนาดบล็อก N สุดท้าย จากนั้นจึงกำหนด "ขีดจำกัดยาก" สำหรับขนาด ของการรับบล็อกคือ \(2 \cdot M_N\) มันป้องกันไม่ให้ blockchain ท้องอืด แต่ยังคงอนุญาตให้มีขีดจำกัด ค่อยๆ เติบโตตามเวลาหากจำเป็น ขนาดของธุรกรรมไม่จำเป็นต้องถูกจำกัดอย่างชัดเจน ล้อมรอบด้วยขนาดของบล็อก และถ้าใครต้องการสร้างธุรกรรมขนาดใหญ่ที่มีอินพุต/เอาท์พุตหลายร้อยรายการ (หรือด้วย ระดับความคลุมเครือในลายเซ็นแหวนสูง) เขาสามารถทำได้โดยการจ่ายค่าธรรมเนียมเพียงพอ 6.2.3 โทษขนาดเกิน นักขุดยังคงมีความสามารถในการสร้างบล็อกที่เต็มไปด้วยธุรกรรมที่ไม่มีค่าธรรมเนียมของตัวเองจนถึงระดับสูงสุด ขนาด 2 \(\cdot\) เมกะไบต์ แม้ว่านักขุดส่วนใหญ่เท่านั้นที่สามารถเปลี่ยนค่ามัธยฐานได้ แต่ก็ยังมี 13 25 การขยายขนาดเวลาเพื่อให้หนึ่งหน่วยเวลาเป็น N บล็อก ขนาดบล็อกเฉลี่ยอาจยังคงเพิ่มขึ้นตามสัดส่วนแบบทวีคูณเป็น 2ˆt ตามทฤษฎี ในทางกลับกัน หมวกทั่วไปมากกว่า ในบล็อกถัดไปจะเป็น M_nf(M_n) สำหรับบางฟังก์ชัน f สมบัติของ f จะเป็นเท่าใด เราเลือกเพื่อรับประกัน "การเติบโตที่เหมาะสม" ของขนาดบล็อก? ความก้าวหน้าของ ขนาดบล็อก (หลังจากเวลาปรับขนาดใหม่) จะเป็นดังนี้: M_n f(M_n)M_n f(f(M_n)M_n)f(M_n)M_n f(f(f(M_n)M_n)f(M_n)M_n)f(f(M_n)M_n)f( ... และเป้าหมายตรงนี้คือเลือก f โดยให้ลำดับนี้เติบโตไม่เร็วไปกว่าแบบเชิงเส้น หรือบางทีอาจจะเป็น Log(t) แน่นอน ถ้า f(M_n) = a สำหรับค่าคงที่ a ลำดับนี้จะเท่ากับ จริงๆ แล้ว M_n กM_n aˆ2M_n aˆ3M_n ... และแน่นอน วิธีเดียวที่จะจำกัดการเติบโตเชิงเส้นให้ได้มากที่สุดก็คือการเลือก a=1 แน่นอนว่านี่เป็นไปไม่ได้ มันไม่อนุญาตให้มีการเติบโตเลย ในทางกลับกัน หาก f(M_n) เป็นฟังก์ชันที่ไม่คงที่ สถานการณ์ก็จะมากกว่านั้นมาก ซับซ้อนและอาจนำไปสู่วิธีแก้ปัญหาที่หรูหรา ฉันจะคิดเรื่องนี้สักพัก ค่าธรรมเนียมนี้จะต้องมากพอที่จะลดค่าปรับขนาดส่วนเกินจากส่วนถัดไป ทำไมผู้ใช้ทั่วไปถึงคิดว่าเป็นผู้ชายล่ะฮะ? ฮะ?
ความเป็นไปได้ที่จะขยาย blockchain และสร้างภาระเพิ่มเติมบนโหนด ที่จะท้อแท้ ผู้เข้าร่วมที่ประสงค์ร้ายจากการสร้างบล็อกขนาดใหญ่เราแนะนำฟังก์ชันการลงโทษ: รางวัลใหม่ = รางวัลฐาน \(\cdot\) BlkSize มน −1 2 กฎนี้ใช้เฉพาะเมื่อ BlkSize มากกว่าขนาดบล็อกอิสระขั้นต่ำที่ควรจะเป็น ใกล้เคียงกับค่าสูงสุด (10kb, \(M_N \cdot 110\%\)) คนงานเหมืองได้รับอนุญาตให้สร้างบล็อกที่มี "ขนาดปกติ" และแม้แต่เท่าๆ กัน เกินด้วยผลกำไรเมื่อค่าธรรมเนียมโดยรวมเกินกว่าค่าปรับ แต่ค่าธรรมเนียมไม่น่าจะเติบโต ไม่เหมือนค่าปรับกำลังสองจึงจะมีความสมดุล 6.3 สคริปต์ธุรกรรม CryptoNote มีระบบย่อยการเขียนสคริปต์ที่เรียบง่ายมาก ผู้ส่งระบุนิพจน์ Φ = f (x1, x2, . . . , xn) โดยที่ n คือจำนวนคีย์สาธารณะปลายทาง {Pi}n ผม=1. ไบนารีห้าเท่านั้น รองรับตัวดำเนินการ: ต่ำสุด สูงสุด ผลรวม mul และ cmp เมื่อผู้รับชำระเงินนี้แล้ว เขาสร้างลายเซ็น \(0 \leq k \leq n\) และส่งต่อไปยังอินพุตธุรกรรม กระบวนการตรวจสอบ เพียงประเมิน Φ ด้วย xi = 1 เพื่อตรวจสอบลายเซ็นที่ถูกต้องสำหรับคีย์สาธารณะ Pi และ xi = 0 ผู้ตรวจสอบยอมรับการพิสูจน์ iffΦ > 0 แม้จะเรียบง่าย แต่วิธีนี้ก็ครอบคลุมทุกกรณีที่เป็นไปได้: • ลายเซ็นหลาย/เกณฑ์ สำหรับลายเซ็นหลายลายเซ็นแบบ Bitcoin สไตล์ “M-out-of-N” (เช่น ผู้รับควรจัดเตรียมลายเซ็นที่ถูกต้องอย่างน้อย \(0 \leq M \leq N\)) Φ = x1+x2+ . .+xN \(\geq M\) (เพื่อความชัดเจน เราใช้สัญลักษณ์พีชคณิตทั่วไป) ลายเซ็นขีดจำกัดแบบถ่วงน้ำหนัก (บางคีย์อาจมีความสำคัญมากกว่าคีย์อื่น) สามารถแสดงเป็น Φ = \(w_1 \cdot x_1\) + \(w_2 \cdot x_2\) + . . . + \(w_N \cdot x_N\) \(\geq wM\) และสถานการณ์ที่มาสเตอร์คีย์สอดคล้องกับ Φ = สูงสุด(\(M \cdot x\), x1 + x2 + . . . + xN) \(\geq M\) มันง่ายที่จะแสดงให้เห็นว่าเคสที่ซับซ้อนใดๆ ก็สามารถเป็นได้ แสดงกับตัวดำเนินการเหล่านี้ เช่น พวกเขาสร้างพื้นฐาน • การป้องกันด้วยรหัสผ่าน การครอบครองรหัสผ่านลับนั้นเทียบเท่ากับความรู้ของ คีย์ส่วนตัว ซึ่งกำหนดมาจากรหัสผ่าน: k = KDF(s) จึงเป็นผู้รับ สามารถพิสูจน์ได้ว่าเขารู้รหัสผ่านโดยการให้ลายเซ็นอื่นใต้คีย์ k ผู้ส่งเพียงแค่เพิ่มกุญแจสาธารณะที่เกี่ยวข้องให้กับเอาท์พุทของเขาเอง โปรดทราบว่าสิ่งนี้ วิธีการมีความปลอดภัยมากกว่า "ปริศนาธุรกรรม" ที่ใช้ใน Bitcoin [13] โดยที่ รหัสผ่านถูกส่งอย่างชัดเจนในอินพุต • กรณีเสื่อมโทรม Φ = 1 หมายความว่าใครๆ ก็สามารถใช้จ่ายเงินได้ Φ = 0 ทำเครื่องหมาย ผลผลิตออกมาใช้ไม่ได้ตลอดไป ในกรณีที่สคริปต์เอาต์พุตรวมกับกุญแจสาธารณะมีขนาดใหญ่เกินไปสำหรับผู้ส่ง สามารถใช้ประเภทเอาต์พุตพิเศษซึ่งระบุว่าผู้รับจะใส่ข้อมูลนี้ลงในอินพุตของเขา ในขณะที่ผู้ส่งให้ข้อมูลเพียง hash เท่านั้น วิธีการนี้คล้ายกับ “จ่ายเพื่อ-hash” ของ Bitcoin คุณลักษณะ แต่แทนที่จะเพิ่มคำสั่งสคริปต์ใหม่ เราจะจัดการกรณีนี้ที่โครงสร้างข้อมูล ระดับ 7 บทสรุป เราได้ตรวจสอบข้อบกพร่องที่สำคัญใน Bitcoin และเสนอแนวทางแก้ไขที่เป็นไปได้ คุณสมบัติที่เป็นประโยชน์เหล่านี้และการพัฒนาอย่างต่อเนื่องของเราทำให้เกิดระบบเงินสดอิเล็กทรอนิกส์ใหม่ CryptoNote เป็นคู่แข่งสำคัญของ Bitcoin ซึ่งเหนือกว่าทางแยกทั้งหมด 14 ความเป็นไปได้ที่จะขยาย blockchain และสร้างภาระเพิ่มเติมบนโหนด ที่จะท้อแท้ ผู้เข้าร่วมที่ประสงค์ร้ายจากการสร้างบล็อกขนาดใหญ่เราแนะนำฟังก์ชันการลงโทษ: รางวัลใหม่ = รางวัลฐาน \(\cdot\) BlkSize มน −1 2 กฎนี้ใช้เฉพาะเมื่อ BlkSize มากกว่าขนาดบล็อกอิสระขั้นต่ำที่ควรจะเป็น ใกล้เคียงกับค่าสูงสุด (10kb, \(M_N \cdot 110\%\)) คนงานเหมืองได้รับอนุญาตให้สร้างบล็อกที่มี "ขนาดปกติ" และแม้แต่เท่าๆ กัน เกินด้วยผลกำไรเมื่อค่าธรรมเนียมโดยรวมเกินกว่าค่าปรับ แต่ค่าธรรมเนียมไม่น่าจะเติบโต ไม่เหมือนค่าปรับกำลังสองจึงจะมีความสมดุล 6.3 สคริปต์ธุรกรรม CryptoNote มีระบบย่อยการเขียนสคริปต์ที่เรียบง่ายมาก ผู้ส่งระบุนิพจน์ Φ = f (x1, x2, . . . , xn) โดยที่ n คือจำนวนคีย์สาธารณะปลายทาง {Pi}n ผม=1. ไบนารีห้าเท่านั้น รองรับตัวดำเนินการ: ต่ำสุด สูงสุด ผลรวม mul และ cmp เมื่อผู้รับชำระเงินนี้แล้ว เขาสร้างลายเซ็น \(0 \leq k \leq n\) และส่งต่อไปยังอินพุตธุรกรรม กระบวนการตรวจสอบ เพียงประเมิน Φ ด้วย xi = 1 เพื่อตรวจสอบลายเซ็นที่ถูกต้องสำหรับคีย์สาธารณะ Pi และ xi = 0 ผู้ตรวจสอบยอมรับการพิสูจน์ iffΦ > 0 แม้จะเรียบง่าย แต่วิธีนี้ก็ครอบคลุมทุกกรณีที่เป็นไปได้: • ลายเซ็นหลาย/เกณฑ์ สำหรับลายเซ็นหลายลายเซ็นแบบ Bitcoin สไตล์ “M-out-of-N” (เช่น ผู้รับควรจัดเตรียมลายเซ็นที่ถูกต้องอย่างน้อย \(0 \leq M \leq N\)) Φ = x1+x2+ . .+xN \(\geq M\) (เพื่อความชัดเจน เราใช้สัญลักษณ์พีชคณิตทั่วไป) ลายเซ็นขีดจำกัดแบบถ่วงน้ำหนัก (บางคีย์อาจมีความสำคัญมากกว่าคีย์อื่น) สามารถแสดงเป็น Φ = \(w_1 \cdot x_1\) + \(w_2 \cdot x_2\) + . . . + \(w_N \cdot x_N\) \(\geq wM\) และฉากio โดยที่มาสเตอร์คีย์สอดคล้องกับ Φ = สูงสุด(\(M \cdot x\), x1 + x2 + . . . + xN) \(\geq M\) มันง่ายที่จะแสดงให้เห็นว่าเคสที่ซับซ้อนใดๆ ก็สามารถเป็นได้ แสดงกับตัวดำเนินการเหล่านี้ เช่น พวกเขาสร้างพื้นฐาน • การป้องกันด้วยรหัสผ่าน การครอบครองรหัสผ่านลับนั้นเทียบเท่ากับความรู้ของ คีย์ส่วนตัว ซึ่งกำหนดมาจากรหัสผ่าน: k = KDF(s) จึงเป็นผู้รับ สามารถพิสูจน์ได้ว่าเขารู้รหัสผ่านโดยการให้ลายเซ็นอื่นใต้คีย์ k ผู้ส่งเพียงแค่เพิ่มกุญแจสาธารณะที่เกี่ยวข้องให้กับเอาท์พุทของเขาเอง โปรดทราบว่าสิ่งนี้ วิธีการนี้มีความปลอดภัยมากกว่า "ปริศนาธุรกรรม" ที่ใช้ใน Bitcoin [13] โดยที่ รหัสผ่านถูกส่งอย่างชัดเจนในอินพุต • กรณีเสื่อมโทรม Φ = 1 หมายความว่าใครๆ ก็สามารถใช้จ่ายเงินได้ Φ = 0 ทำเครื่องหมาย ผลผลิตออกมาใช้ไม่ได้ตลอดไป ในกรณีที่สคริปต์เอาต์พุตรวมกับกุญแจสาธารณะมีขนาดใหญ่เกินไปสำหรับผู้ส่ง สามารถใช้ประเภทเอาต์พุตพิเศษซึ่งระบุว่าผู้รับจะใส่ข้อมูลนี้ลงในอินพุตของเขา ในขณะที่ผู้ส่งให้ข้อมูลเพียง hash เท่านั้น วิธีการนี้คล้ายกับ “จ่ายเพื่อ-hash” ของ Bitcoin คุณลักษณะ แต่แทนที่จะเพิ่มคำสั่งสคริปต์ใหม่ เราจะจัดการกรณีนี้ที่โครงสร้างข้อมูล ระดับ 7 บทสรุป เราได้ตรวจสอบข้อบกพร่องที่สำคัญใน Bitcoin และเสนอแนวทางแก้ไขที่เป็นไปได้ คุณสมบัติที่เป็นประโยชน์เหล่านี้และการพัฒนาอย่างต่อเนื่องของเราทำให้เกิดระบบเงินสดอิเล็กทรอนิกส์ใหม่ CryptoNote เป็นคู่แข่งสำคัญของ Bitcoin ซึ่งเหนือกว่าทางแยกทั้งหมด 14 26 สิ่งนี้อาจไม่จำเป็นหากเราสามารถหาวิธีผูกขนาดบล็อกเมื่อเวลาผ่านไปได้... สิ่งนี้ก็ไม่ถูกต้องเช่นกัน พวกเขาเพิ่งตั้งค่า "NewReward" ให้เป็นพาราโบลาที่หันขึ้นด้านบน ขนาดบล็อกเป็นตัวแปรอิสระ รางวัลใหม่จึงระเบิดขึ้นจนไม่มีที่สิ้นสุด ถ้าในทางกลับกัน มือ รางวัลใหม่คือสูงสุด(0,รางวัลฐาน(1-(BlkSize/Mn - 1)ˆ2)) จากนั้นรางวัลใหม่ จะเป็นพาราโบลาหันหน้าลงโดยมีจุดสูงสุดที่ขนาดบล็อก = Mn และมีจุดตัดที่ ขนาดบล็อก = 0 และขนาดบล็อก = 2Mn และนั่นดูเหมือนจะเป็นสิ่งที่พวกเขาพยายามจะอธิบาย อย่างไรก็ตามสิ่งนี้ไม่ได้
Analysis
Analysis
5 Not that it matters too much when a billion people in the world live on less than a dollar a day and have no hope in ever participating in any sort of mining network... but an economic world driven by a p2p currency system with one-cpu-one-vote would be, presumably, more fair than a system driven by fractional reserve banking. But Cryptonote’s protocol still requires 51% honest users... see, for example, the Cryptonote forums where one of the developers, Pliskov, says that a traditional replace-the-data-on-theblockchain 51% attack can still work. https://forum.cryptonote.org/viewtopic.php?f=2&t=198 Note that you don’t really need 51% honest users. You just really need "no single dishonest faction with more than 51% of the hashing power of the network." Let’s call this so-called problem of bitcoin "adaptive rigidity." Cryptonote’s solution to adaptive rigidity is adaptive flexibility in the protocol parameter values. If you need block sizes bigger, no problem, the network will have been gently adjusting the whole time. That is to say, the way that Bitcoin adjusts difficulty over time can be replicated across all of our protocol parameters so that network consensus need not be obtained for updating the protocol. On the surface this seems like a good idea, but without careful forethought, a self-adjusting system can become quite unpredictable and chaotic. We’ll look further into this later as the opportunities arise. "Good" systems are somewhere between adaptively rigid and adaptively flexible, and perhaps even the rigidity itself are adaptive. If we truly had "one-CPU-one-vote," then collaborating and developing pools to get to 51% would be more difficult. We would expect every CPU in the world to be mining, from phones to the on-board CPU in your Tesla while it’s charging. http://en.wikipedia.org/wiki/Pareto_principle I claim that the Pareto equilibrium is somewhat unavoidable. Either 20% of the system will own 80% of the CPUs, or 20% of the system will own 80% of the ASICs. I hypothesize this because the underlying distribution of wealth in society already exhibits the Pareto distribution, and as new miners join up, they are drawn from that underlying distribution. However, I argue that protocols with one-cpu-one-vote will see ROI on hardware. Block reward per node will be more closely proportional to number of nodes in the network because distribution of performance across the nodes will be much more tight. Bitcoin, on the other hand, sees a block reward (per node) more proportional to the computational capacity of that node. That is to say, only the "big boys" are still in the mining game. On the other hand, even though the Pareto principle will still be in play, in a one-cpu-one-vote world, everyone participates in network security and gains a bit of mining income. In an ASIC world, it’s not sensible to rig every XBox and cell phone to mine. In a onecpu-one-vote world, it’s very sensible in terms of mining reward. As a delightful consequence, gaining 51% of the vote is more difficult when there are more and more votes, yielding a lovely benefit to network security..

hardware described previously. Suppose that the global hashrate decreases significantly, even for a moment, he can now use his mining power to fork the chain and double-spend. As we shall see later in this article, it is not unlikely for the previously described event to take place. 2.3 Irregular emission Bitcoin has a predetermined emission rate: each solved block produces a fixed amount of coins. Approximately every four years this reward is halved. The original intention was to create a limited smooth emission with exponential decay, but in fact we have a piecewise linear emission function whose breakpoints may cause problems to the Bitcoin infrastructure. When the breakpoint occurs, miners start to receive only half of the value of their previous reward. The absolute difference between 12.5 and 6.25 BTC (projected for the year 2020) may seem tolerable. However, when examining the 50 to 25 BTC drop that took place on November 28 2012, felt inappropriate for a significant number of members of the mining community. Figure 1 shows a dramatic decrease in the network’s hashrate in the end of November, exactly when the halving took place. This event could have been the perfect moment for the malevolent individual described in the proof-of-work function section to carry-out a double spending attack [36]. Fig. 1. Bitcoin hashrate chart (source: http://bitcoin.sipa.be) 2.4 Hardcoded constants Bitcoin has many hard-coded limits, where some are natural elements of the original design (e.g. block frequency, maximum amount of money supply, number of confirmations) whereas other seem to be artificial constraints. It is not so much the limits, as the inability of quickly changing 3 hardware described previously. Suppose that the global hashrate decreases significantly, even for a moment, he can now use his mining power to fork the chain and double-spend. As we shall see later in this article, it is not unlikely for the previously described event to take place. 2.3 Irregular emission Bitcoin has a predetermined emission rate: each solved block produces a fixed amount of coins. Approximately every four years this reward is halved. The original intention was to create a limited smooth emission with exponential decay, but in fact we have a piecewise linear emission function whose breakpoints may cause problems to the Bitcoin infrastructure. When the breakpoint occurs, miners start to receive only half of the value of their previous reward. The absolute difference between 12.5 and 6.25 BTC (projected for the year 2020) may seem tolerable. However, when examining the 50 to 25 BTC drop that took place on November 28 2012, felt inappropriate for a significant number of members of the mining community. Figure 1 shows a dramatic decrease in the network’s hashrate in the end of November, exactly when the halving took place. This event could have been the perfect moment for the malevolent individual described in the proof-of-work function section to carry-out a double spending attack [36]. Fig. 1. Bitcoin hashrate chart (source: http://bitcoin.sipa.be) 2.4 Hardcoded constants Bitcoin has many hard-coded limits, where some are natural elements of the original design (e.g. block frequency, maximum amount of money supply, number of confirmations) whereas other seem to be artificial constraints. It is not so much the limits, as the inability of quickly changing 3 6 Let’s call this what it is, a zombie attack. Let’s discuss how continuous emission may be related to one-cpu-one-vote in a zombie attack scenario. In a one-cpu-one-vote world, every cell phone and car, whenever idle, would be mining. Collecting heaps of cheap hardware to create a mining farm would be very very easy, because just about everything has a CPU in it. On the other hand, at that point, the number of CPUs required to launch a 51% attack would be quite astonishing, I would think. Furthermore, precisely because it would be easy to collect cheap hardware, we can reasonably expect a lot of folks to start hoarding anything with a CPU. The arms race in a one-cpu-one-vote world is necessarily more egalitarian than in an ASIC world. Hence, a discontinuity in network security due to emission rates should be LESS of a problem in a one-cpu-one-vote world. However, two facts remain: 1) discontinuity in emission rate can lead to a stuttering effect in the economy and in network security both, which is bad, and 2) even though a 51% attack performed by someone collecting cheap hardware can still occur in a one-cpu-one-vote world, it seems like it should be harder. Presumably, the safeguard against this is that all the dishonest actors will be trying this simultaneously, and we fall back to Bitcoin’s previous security notion: "we require no dishonest faction to control more than 51% of the network." The author is claiming here that one problem with bitcoin is that discontinuity in coin emission rate could lead to sudden drops in network participation, and hence network security. Thus, a continuous, differentiable, smooth coin emission rate is preferable. The author ain’t wrong, necessarily. Any sort of sudden decrease in network participation can lead to such a problem, and if we can remove one source of it, we should. Having said that, it’s possible that long periods of "relatively constant" coin emission punctuated by sudden changes is the ideal way to go from an economics point of view. I’m not an economist. So, perhaps we must decide if we are going to trade network security for economic something-whatsit here? http://arxiv.org/abs/1402.2009
them if necessary that causes the main drawbacks. Unfortunately, it is hard to predict when the
constants may need to be changed and replacing them may lead to terrible consequences.
A good example of a hardcoded limit change leading to disastrous consequences is the block
size limit set to 250kb1. This limit was sufficient to hold about 10000 standard transactions. In
early 2013, this limit had almost been reached and an agreement was reached to increase the
limit. The change was implemented in wallet version 0.8 and ended with a 24-blocks chain split
and a successful double-spend attack [9]. While the bug was not in the Bitcoin protocol, but
rather in the database engine it could have been easily caught by a simple stress test if there was
no artificially introduced block size limit.
Constants also act as a form of centralization point.
Despite the peer-to-peer nature of
Bitcoin, an overwhelming majority of nodes use the official reference client [10] developed by
a small group of people. This group makes the decision to implement changes to the protocol
and most people accept these changes irrespective of their “correctness”. Some decisions caused
heated discussions and even calls for boycott [11], which indicates that the community and the
developers may disagree on some important points. It therefore seems logical to have a protocol
with user-configurable and self-adjusting variables as a possible way to avoid these problems.
2.5
Bulky scripts
The scripting system in Bitcoin is a heavy and complex feature. It potentially allows one to create
sophisticated transactions [12], but some of its features are disabled due to security concerns and
some have never even been used [13]. The script (including both senders’ and receivers’ parts)
for the most popular transaction in Bitcoin looks like this:
การวิเคราะห์

5
ไม่ใช่ว่ามันจะสำคัญมากเกินไปเมื่อผู้คนนับพันล้านคนในโลกนี้ใช้ชีวิตด้วยเงินน้อยกว่าหนึ่งดอลลาร์ต่อหนึ่งดอลลาร์
และไม่มีความหวังที่จะเข้าร่วมในเครือข่ายการขุดใดๆ... แต่เป็นเศรษฐกิจ
โลกที่ขับเคลื่อนด้วยระบบสกุลเงิน p2p ที่มีหนึ่ง cpu หนึ่งโหวตน่าจะมากกว่านั้น
ยุติธรรมกว่าระบบที่ขับเคลื่อนโดยธนาคารสำรองแบบเศษส่วน
แต่โปรโตคอลของ Cryptonote ยังคงต้องการผู้ใช้ที่ซื่อสัตย์ 51%... ดูตัวอย่าง Cryptonote
ฟอรัมที่ Pliskov หนึ่งในนักพัฒนากล่าวว่าการโจมตีแบบแทนที่ข้อมูลบน theblockchain 51% ยังคงสามารถทำงานได้ https://forum.cryptonote.org/viewtopic.php?f=2&t=198
โปรดทราบว่าคุณไม่จำเป็นต้องมีผู้ใช้ที่ซื่อสัตย์ถึง 51% คุณแค่ต้องการ "ไม่มีความทุจริตแม้แต่คนเดียว"
ฝ่ายที่มีอำนาจมากกว่า 51% ของ hashing ของเครือข่าย"
ลองเรียกสิ่งนี้ว่าปัญหาของ bitcoin ว่า "ความแข็งแกร่งในการปรับตัว" โซลูชันของ Cryptonote เพื่อการปรับตัว
ความแข็งแกร่งคือความยืดหยุ่นในการปรับตัวในค่าพารามิเตอร์โปรโตคอล หากคุณต้องการขนาดบล็อกที่ใหญ่ขึ้น
ไม่มีปัญหา เครือข่ายจะมีการปรับเบาๆ ตลอดเวลา
กล่าวคือ
วิธีที่ Bitcoin ปรับความยากเมื่อเวลาผ่านไปสามารถทำซ้ำได้ทั่วทั้งโปรโตคอลของเรา
พารามิเตอร์เพื่อให้ไม่จำเป็นต้องได้รับฉันทามติของเครือข่ายในการอัพเดตโปรโตคอล
ดูเผินๆ ดูเหมือนเป็นความคิดที่ดี แต่หากปราศจากการไตร่ตรองอย่างรอบคอบ จะเป็นการปรับตัวเอง
ระบบอาจคาดเดาไม่ได้และวุ่นวายเลยทีเดียว เราจะพิจารณาเรื่องนี้เพิ่มเติมในภายหลังในฐานะ
โอกาสเกิดขึ้น ระบบ "ดี" อยู่ระหว่างการปรับตัวที่เข้มงวดกับการปรับตัว
ยืดหยุ่นได้ และบางทีแม้แต่ความแข็งแกร่งเองก็สามารถปรับเปลี่ยนได้
หากเรามี "หนึ่ง CPU-หนึ่ง-โหวต" อย่างแท้จริง ให้ร่วมมือกันและพัฒนากลุ่มเพื่อให้ได้คะแนนถึง 51%
คงจะลำบากกว่า.. เราคาดหวังว่า CPU ทุกตัวในโลกจะถูกขุดจากโทรศัพท์
ไปยัง CPU ออนบอร์ดใน Tesla ของคุณในขณะที่กำลังชาร์จ
http://en.wikipedia.org/wiki/Pareto_principle
ฉันอ้างว่าสมดุลของพาเรโตค่อนข้างหลีกเลี่ยงไม่ได้ 20% ของระบบจะเป็นเช่นนั้น
เป็นเจ้าของ CPU 80% หรือ 20% ของระบบจะเป็นเจ้าของ ASIC 80% ฉันตั้งสมมติฐานนี้เพราะว่าการกระจายความมั่งคั่งในสังคมนั้นได้แสดงให้เห็นการกระจายของพาเรโตแล้ว
และเมื่อมีผู้ขุดรายใหม่เข้าร่วม พวกเขาจะถูกดึงมาจากการกระจายพื้นฐานนั้น
อย่างไรก็ตาม ฉันยืนยันว่าโปรโตคอลที่มีหนึ่ง cpu-หนึ่งโหวตจะเห็น ROI บนฮาร์ดแวร์
บล็อก
รางวัลต่อโหนดจะแปรผันตามจำนวนโหนดในเครือข่ายอย่างใกล้ชิดมากขึ้นเพราะว่า
การกระจายประสิทธิภาพข้ามโหนดจะแน่นแฟ้นยิ่งขึ้น Bitcoin อีกด้านหนึ่ง
hand เห็นรางวัลบล็อก (ต่อโหนด) เป็นสัดส่วนมากกว่าความสามารถในการคำนวณของสิ่งนั้น
โหนด กล่าวคือ มีเพียง "หนุ่มใหญ่" เท่านั้นที่ยังคงอยู่ในเกมการขุด ในทางกลับกัน
แม้ว่าหลักการ Pareto จะยังคงมีบทบาทอยู่ แต่ในโลกที่มีหนึ่ง CPU หนึ่งเสียง ทุกคน
มีส่วนร่วมในการรักษาความปลอดภัยเครือข่ายและได้รับรายได้จากการขุดเล็กน้อย
ในโลกของ ASIC มันไม่สมเหตุสมผลเลยที่จะขุด XBox และโทรศัพท์มือถือทุกเครื่องมาทำเหมือง
ในโลกแบบ onecpu-one-vote มันสมเหตุสมผลมากในแง่ของรางวัลการขุด ผลอันน่ายินดีก็คือ
การได้คะแนนเสียงถึง 51% จะยิ่งยากขึ้นไปอีกเมื่อมีคะแนนโหวตเพิ่มมากขึ้นเรื่อยๆ ทำให้ได้คะแนนน่ารัก
ประโยชน์ต่อความปลอดภัยของเครือข่าย..ฮาร์ดแวร์ที่อธิบายไว้ก่อนหน้านี้ สมมติว่าอัตรา hash ทั่วโลกลดลงอย่างมีนัยสำคัญ แม้กระทั่งสำหรับ
ขณะนี้เขาสามารถใช้พลังการขุดเพื่อแยกโซ่และใช้จ่ายสองเท่า ดังที่เราจะได้เห็น
ภายหลังในบทความนี้ ไม่น่าเป็นไปได้ที่เหตุการณ์ที่อธิบายไว้ก่อนหน้านี้จะเกิดขึ้น
2.3
การปล่อยก๊าซเรือนกระจกไม่สม่ำเสมอ
Bitcoin มีอัตราการปล่อยก๊าซที่กำหนดไว้ล่วงหน้า: แต่ละบล็อกที่แก้ไขได้จะผลิตเหรียญจำนวนคงที่
ประมาณทุกๆ สี่ปี รางวัลนี้จะลดลงครึ่งหนึ่ง ความตั้งใจเดิมคือการสร้าง
การแผ่รังสีที่ราบรื่นจำกัดโดยมีการสลายตัวแบบเอ็กซ์โปเนนเชียล แต่จริงๆ แล้ว เรามีการแผ่รังสีเชิงเส้นแบบชิ้นๆ
ฟังก์ชั่นที่มีจุดพักอาจทำให้เกิดปัญหากับโครงสร้างพื้นฐาน Bitcoin
เมื่อจุดพักเกิดขึ้น นักขุดจะเริ่มได้รับเพียงครึ่งหนึ่งของมูลค่าก่อนหน้า
รางวัล ความแตกต่างสัมบูรณ์ระหว่าง 12.5 และ 6.25 BTC (คาดการณ์สำหรับปี 2020) อาจ
ดูเหมือนจะทนได้ อย่างไรก็ตาม เมื่อตรวจสอบการลดลง 50 ถึง 25 BTC ที่เกิดขึ้นในเดือนพฤศจิกายน
เมื่อวันที่ 28 กันยายน 2012 รู้สึกว่าไม่เหมาะสมสำหรับสมาชิกของชุมชนเหมืองแร่จำนวนที่มีนัยสำคัญ รูปที่
1 แสดงการลดลงอย่างมากในอัตรา hashของเครือข่ายในช่วงปลายเดือนพฤศจิกายน ซึ่งตรงกับเวลาที่
การลดจำนวนลงครึ่งหนึ่งเกิดขึ้น เหตุการณ์นี้อาจเป็นช่วงเวลาที่สมบูรณ์แบบสำหรับบุคคลที่มุ่งร้าย
อธิบายไว้ในส่วนฟังก์ชัน proof-of-work เพื่อดำเนินการโจมตีการใช้จ่ายสองเท่า [36]
รูปที่ 1. Bitcoin hashกราฟอัตรา
(ที่มา: http://bitcoin.sipa.be)
2.4
ค่าคงที่แบบฮาร์ดโค้ด
Bitcoin มีข้อจำกัดแบบฮาร์ดโค้ดมากมาย โดยที่บางส่วนเป็นองค์ประกอบตามธรรมชาติของการออกแบบดั้งเดิม (เช่น
ความถี่บล็อก ปริมาณเงินสูงสุด จำนวนการยืนยัน) ในขณะที่อื่นๆ
ดูเหมือนจะเป็นข้อจำกัดเทียม ไม่ได้มีข้อจำกัดมากนัก เนื่องจากไม่สามารถเปลี่ยนแปลงได้อย่างรวดเร็ว
3
ฮาร์ดแวร์ที่อธิบายไว้ก่อนหน้านี้ สมมติว่าอัตรา hash ทั่วโลกลดลงอย่างมีนัยสำคัญ แม้แต่ด้วยซ้ำ
ขณะนี้เขาสามารถใช้พลังการขุดเพื่อแยกโซ่และใช้จ่ายสองเท่า ดังที่เราจะได้เห็น
ภายหลังในบทความนี้ ไม่น่าเป็นไปได้ที่เหตุการณ์ที่อธิบายไว้ก่อนหน้านี้จะเกิดขึ้น
2.3
การปล่อยก๊าซเรือนกระจกไม่สม่ำเสมอ
Bitcoin มีอัตราการปล่อยก๊าซที่กำหนดไว้ล่วงหน้า: แต่ละบล็อกที่แก้ไขได้จะผลิตเหรียญจำนวนคงที่
ประมาณทุกๆ สี่ปี รางวัลนี้จะลดลงครึ่งหนึ่ง ความตั้งใจเดิมคือการสร้าง
การแผ่รังสีที่ราบรื่นจำกัดโดยมีการสลายตัวแบบเอ็กซ์โปเนนเชียล แต่จริงๆ แล้ว เรามีการแผ่รังสีเชิงเส้นแบบชิ้นๆ
ฟังก์ชั่นที่มีจุดพักอาจทำให้เกิดปัญหากับโครงสร้างพื้นฐาน Bitcoin
เมื่อจุดพักเกิดขึ้น นักขุดจะเริ่มได้รับเพียงครึ่งหนึ่งของมูลค่าก่อนหน้า
รางวัล ความแตกต่างสัมบูรณ์ระหว่าง 12.5 และ 6.25 BTC (คาดการณ์สำหรับปี 2020) อาจ
ดูเหมือนจะทนได้ อย่างไรก็ตาม เมื่อตรวจสอบการลดลง 50 ถึง 25 BTC ที่เกิดขึ้นในเดือนพฤศจิกายน
เมื่อวันที่ 28 กันยายน 2012 รู้สึกว่าไม่เหมาะสมสำหรับสมาชิกของชุมชนเหมืองแร่จำนวนที่มีนัยสำคัญ รูปที่
1 แสดงการลดลงอย่างมากในอัตรา hash ของเครือข่ายในช่วงปลายเดือนพฤศจิกายน ซึ่งตรงกับเวลาที่
การลดจำนวนลงครึ่งหนึ่งเกิดขึ้น เหตุการณ์นี้อาจเป็นช่วงเวลาที่สมบูรณ์แบบสำหรับบุคคลที่มุ่งร้าย
อธิบายไว้ในส่วนฟังก์ชัน proof-of-work เพื่อดำเนินการโจมตีการใช้จ่ายสองเท่า [36]
รูปที่ 1. Bitcoin hashกราฟอัตรา
(ที่มา: http://bitcoin.sipa.be)
2.4
ค่าคงที่แบบฮาร์ดโค้ด
Bitcoin มีข้อจำกัดแบบฮาร์ดโค้ดมากมาย โดยที่บางส่วนเป็นองค์ประกอบตามธรรมชาติของการออกแบบดั้งเดิม (เช่น
ความถี่บล็อก ปริมาณเงินสูงสุด จำนวนการยืนยัน) ในขณะที่อื่นๆ
ดูเหมือนจะเป็นข้อจำกัดเทียม ไม่ได้มีข้อจำกัดมากนัก เนื่องจากไม่สามารถเปลี่ยนแปลงได้อย่างรวดเร็ว
3
6
เรียกสิ่งนี้ว่ามันคือการโจมตีของซอมบี้
เรามาหารือกันว่าการปล่อยก๊าซเรือนกระจกอย่างต่อเนื่องจะเป็นอย่างไร
เกี่ยวข้องกับ one-cpu-one-vote ในสถานการณ์การโจมตีด้วยซอมบี้
ในโลกที่มีหนึ่ง CPU หนึ่งโหวต โทรศัพท์มือถือและรถยนต์ทุกเครื่อง เมื่อใดก็ตามที่ไม่ได้ใช้งาน จะถูกขุดเหมือง การรวบรวมฮาร์ดแวร์ราคาถูกจำนวนมากเพื่อสร้างฟาร์มขุดจะง่ายมากเพราะเพียง
เกี่ยวกับทุกสิ่งที่มี CPU อยู่ในนั้น ในทางกลับกัน ณ จุดนั้นคือจำนวน CPU
ฉันคิดว่าจำเป็นต้องทำการโจมตี 51% ค่อนข้างน่าประหลาดใจ
นอกจากนี้
แม่นยำ เพราะ ง่ายต่อการรวบรวมฮาร์ดแวร์ราคาถูก เราจึงสามารถคาดหวังได้อย่างสมเหตุสมผล
หลายๆ คนเริ่มสะสมอะไรก็ตามด้วย CPU การแข่งขันทางอาวุธในโลกที่มีหนึ่งซีพียูหนึ่งโหวต
จำเป็นต้องมีความเสมอภาคมากกว่าในโลก ASIC
จึงมีความไม่ต่อเนื่องในเครือข่าย
ความปลอดภัยเนื่องจากอัตราการปล่อยมลพิษควรจะเป็นปัญหาน้อยกว่าในโลกที่มีหนึ่งซีพียูหนึ่งเสียง
อย่างไรก็ตาม ยังมีข้อเท็จจริงสองประการ: 1) อัตราการปล่อยก๊าซที่ไม่ต่อเนื่องอาจทำให้เกิดอาการติดอ่างใน
ทั้งด้านเศรษฐกิจและความปลอดภัยเครือข่าย ซึ่งแย่ และ 2) แม้ว่าจะมีการโจมตีถึง 51% ก็ตาม
ดำเนินการโดยคนที่รวบรวมฮาร์ดแวร์ราคาถูกยังสามารถเกิดขึ้นในซีพียูตัวเดียวได้-โหวตโลก
ดูเหมือนว่ามันควรจะยากกว่านี้
สมมุติว่าการป้องกันสิ่งนี้ก็คือ นักแสดงที่ไม่ซื่อสัตย์ทั้งหมด จะลองทำสิ่งนี้
พร้อมกัน และเราถอยกลับไปใช้แนวคิดด้านความปลอดภัยก่อนหน้าของ Bitcoin: "เราไม่ต้องการการทุจริต
ฝ่ายที่จะควบคุมมากกว่า 51% ของเครือข่าย”
ผู้เขียนอ้างที่นี่ว่าปัญหาหนึ่งของ bitcoin ก็คือความไม่ต่อเนื่องในการปล่อยเหรียญ
อัตรานี้อาจส่งผลให้การมีส่วนร่วมของเครือข่ายลดลงอย่างกะทันหัน และด้วยเหตุนี้ความปลอดภัยของเครือข่าย ดังนั้น
อัตราการปล่อยเหรียญที่ต่อเนื่อง เปลี่ยนแปลงได้ และราบรื่นจะดีกว่า
ผู้เขียนไม่ผิดแน่นอน การมีส่วนร่วมของเครือข่ายที่ลดลงอย่างกะทันหันสามารถทำได้
นำไปสู่ปัญหาดังกล่าว และถ้าเราสามารถลบแหล่งที่มาของมันได้ เราก็ควรทำ พูดแล้วก็เป็นอย่างนั้น
เป็นไปได้ว่าการปล่อยเหรียญ "ค่อนข้างคงที่" เป็นระยะเวลานานจะถูกคั่นด้วยการเปลี่ยนแปลงอย่างกะทันหัน
เป็นวิธีที่เหมาะที่จะไปจากมุมมองทางเศรษฐศาสตร์ ฉันไม่ใช่นักเศรษฐศาสตร์ ดังนั้นบางทีเรา
ต้องตัดสินใจว่าเราจะแลกความปลอดภัยเครือข่ายเพื่ออะไรบางอย่างทางเศรษฐกิจหรือไม่?
http://arxiv.org/abs/1402.2009หากจำเป็นซึ่งทำให้เกิดข้อเสียเปรียบหลัก น่าเสียดายที่เป็นการยากที่จะคาดเดาได้ว่าเมื่อใด
ค่าคงที่อาจจำเป็นต้องเปลี่ยนและการแทนที่อาจนำไปสู่ผลลัพธ์ที่เลวร้าย
ตัวอย่างที่ดีของการเปลี่ยนแปลงขีดจำกัดแบบฮาร์ดโค้ดที่นำไปสู่ผลที่ตามมาที่ร้ายแรงคือการบล็อก
จำกัดขนาดไว้ที่ 250kb1 ขีดจำกัดนี้เพียงพอที่จะรองรับธุรกรรมมาตรฐานได้ประมาณ 10,000 รายการ ใน
ต้นปี 2013 เกือบจะถึงขีดจำกัดนี้แล้ว และได้บรรลุข้อตกลงเพื่อเพิ่ม
ขีด จำกัด การเปลี่ยนแปลงถูกนำไปใช้ในกระเป๋าเงินเวอร์ชัน 0.8 และจบลงด้วยการแยกลูกโซ่ 24 บล็อก
และการโจมตีแบบใช้จ่ายสองครั้งที่ประสบความสำเร็จ [9] ในขณะที่จุดบกพร่องไม่ได้อยู่ในโปรโตคอล Bitcoin แต่
แต่ในกลไกฐานข้อมูลนั้นสามารถตรวจจับได้ง่ายโดยการทดสอบความเครียดแบบง่าย ๆ หากมี
ไม่มีการจำกัดขนาดบล็อกที่แนะนำโดยไม่ได้ตั้งใจ
ค่าคงที่ยังทำหน้าที่เป็นรูปแบบหนึ่งของจุดรวมศูนย์
แม้ว่าลักษณะแบบ peer-to-peer ของ
Bitcoin โหนดส่วนใหญ่ใช้ไคลเอนต์อ้างอิงอย่างเป็นทางการ [10] พัฒนาโดย
คนกลุ่มเล็กๆ กลุ่มนี้ตัดสินใจดำเนินการเปลี่ยนแปลงโปรโตคอล
และคนส่วนใหญ่ยอมรับการเปลี่ยนแปลงเหล่านี้โดยไม่คำนึงถึง "ความถูกต้อง" ของพวกเขา การตัดสินใจบางอย่างเกิดขึ้น
การอภิปรายอย่างเผ็ดร้อนและแม้กระทั่งเรียกร้องให้คว่ำบาตร [11] ซึ่งบ่งชี้ว่าชุมชนและ
นักพัฒนาซอฟต์แวร์อาจไม่เห็นด้วยกับประเด็นสำคัญบางประการ ดังนั้นจึงดูเหมือนสมเหตุสมผลที่จะมีโปรโตคอล
ด้วยตัวแปรที่ผู้ใช้สามารถกำหนดค่าได้และปรับได้เองซึ่งเป็นวิธีที่เป็นไปได้ในการหลีกเลี่ยงปัญหาเหล่านี้
2.5
สคริปต์ขนาดใหญ่
ระบบการเขียนสคริปต์ใน Bitcoin เป็นคุณลักษณะที่หนักและซับซ้อน มันอาจทำให้ใครคนหนึ่งสามารถสร้างได้
ธุรกรรมที่ซับซ้อน [12] แต่คุณลักษณะบางอย่างถูกปิดใช้งานเนื่องจากข้อกังวลด้านความปลอดภัยและ
บางตัวไม่เคยใช้ด้วยซ้ำ [13] สคริปต์ (รวมทั้งส่วนของผู้ส่งและผู้รับ)
สำหรับธุรกรรมยอดนิยมใน Bitcoin มีลักษณะดังนี้: