RLN(Rate Limiting Nullifier)是一個零知識應(yīng)用,可用于去中心化、匿名環(huán)境下的垃圾郵件預(yù)防。 區(qū)塊鏈的匿名性為某些應(yīng)用程序打開了垃圾郵件和Sybil攻擊(女巫攻擊)的可能性,這可能會嚴(yán)重影響用戶體驗和應(yīng)用程序的整體功能。例如,一個Web3聊天應(yīng)用程序,其中的用戶是匿名的。每個人都可以發(fā)送無限量的消息,但我們沒有能力踢出這個成員,因為消息的發(fā)送者是匿名的。 RLN幫助我們識別并“踢出”垃圾郵件發(fā)送者。 此外,在匿名環(huán)境中,RLN不僅有助于防止垃圾郵件攻擊,而且可以限制用戶的行為次數(shù)(例如投票或競標(biāo))。 circon電路結(jié)構(gòu): 原理RLN的功能由三個部分組成,將它們集成在一起可以提供垃圾郵件和Sybil攻擊保護。這些部分應(yīng)該由需要匿名和垃圾郵件保護的上游應(yīng)用程序進行集成。應(yīng)用程序可以是中心化的或去中心化的。對于去中心化的應(yīng)用程序,每個用戶為應(yīng)用程序維護獨立的存儲和計算資源。這三個部分是: - 用戶注冊(Registration)
- 用戶交互(Interaction)
- 用戶移除(Slashing)
用戶注冊在注冊應(yīng)用程序之前,用戶需要生成一個密鑰,并使用Poseidon哈希函數(shù)identityCommitment = posseidonHash(secretKey)從秘密密鑰派生出身份。 用戶通過提供某種形式的抵押和他們從密鑰派生出的身份來注冊應(yīng)用程序。應(yīng)用程序維護一個Merkle樹數(shù)據(jù)結(jié)構(gòu)(在RLN的最新迭代中,我們使用增量Merkle樹算法來提高Gas的使用效率,但Merkle樹不一定要在鏈上),該結(jié)構(gòu)存儲已注冊用戶的身份。注冊成功后,用戶的身份將存儲在Merkle樹的葉子節(jié)點中,并為他們分配一個索引,表示他們在樹中的位置。 用戶交互對于用戶想要與應(yīng)用程序進行的每個交互(如合約調(diào)用),用戶必須生成一個零知識證明(zk proof),確保他們的身份是成員Merkle樹的一部分。 RLN有許多用例,例如投票應(yīng)用程序(每次選舉1票)、聊天(每秒1條消息)和交互速率限制訪問等。驗證器可以是集中化應(yīng)用程序的服務(wù)器或去中心化應(yīng)用程序的其他用戶。 通常,反垃圾郵件規(guī)則的抽象形式為:用戶每個時期(epoch)內(nèi)不得進行超過X個交互。為了簡單起見,讓我們將規(guī)則轉(zhuǎn)化為:“用戶每秒鐘不能發(fā)送超過一條消息! 可以使用Shamir秘密共享方案(閱讀更多),該方案允許將秘密(例如分成n個部分)并在呈現(xiàn)n個部分中的任何m個部分(m <= n)時恢復(fù)它。 因此,用戶必須將其secret_key分成n個部分,并為每個交互顯示secret_key的新部分。因此,除了證明成為Merkle樹成員外,用戶還必須證明顯示的部分真正是他們的secret_key的部分。 如果他們每個時期(epoch)內(nèi)進行交互的次數(shù)超過了允許的數(shù)量,他們的secret_key可能會被完全重建。 用戶移除RLN機制的最后一個功能是,它允許任何人通過知道用戶的秘密密鑰將其從成員樹中移除。 成員樹包含所有已注冊用戶的身份。用戶的身份是從其密鑰派生出來的,用戶的密鑰僅在垃圾郵件事件中(除非原始用戶想要自行刪除,因為他們知道自己的密鑰)才會被揭示。當(dāng)存在經(jīng)濟押金時,RLN機制可以以這樣的方式實現(xiàn),即將垃圾郵件發(fā)送者的押金發(fā)送給第一個正確報告垃圾郵件發(fā)送者的用戶,以提供已重建垃圾郵件發(fā)送者的密鑰作為證明。 參考《https://rate-limiting-nullifier.github.io/rln-docs/what_is_rln.html》 |