-
m-relay
<rucknium:monero.social> MRL meeting in this room in two hours.
-
m-relay
<doedl...:zano.org> /my flip flop
-
m-relay
<doedl...:zano.org> my matrix server is down all day, so I may use this handle today. Bridges may see doedl... instead of antilt.
-
moneromooo
Anyone's welcome. If you've got input that's on topic, you're welcome to share it, whatever your nick.
-
moneromooo
"on topic" being particularly important for a mrl meeting ^_^
-
moneromooo
If people know you under another nick and you want to rely on this, you may want to post a signed "my nick will be doedl... today message on paste.debian.net.
-
moneromooo
(signed with your usual nick's known key obvs)
-
m-relay
<doedl...:zano.org> hi, yes I looked at the anchor code logic today.
-
moneromooo
But honestly as long as what you say doesn't trigger smell test alarms, you should be fine just with that "btw..." note at meeting start.
-
m-relay
<doedl...:zano.org> do you have time for a quick question?
-
moneromooo
Me ? I'be been away from monero for quite a while now, so anything research related is probably not for me. But if not, sure.
-
m-relay
<doedl...:zano.org> >std::for_each(begin, end, [&apl](const anchor_peerlist_entry &a) {apl.push_back(a);});
-
m-relay
-
m-relay
<doedl...:zano.org> Does this sort and copy entries to apl ?
-
moneromooo
Looks like it. &apl means apl is a reference, not a copy.
-
moneromooo
Sorted if apl is a sorted thing, like a map, say.
-
moneromooo
And the keys have a operator<,
-
m-relay
<doedl...:zano.org> it is called like:
-
m-relay
<doedl...:zano.org> std::vector<anchor_peerlist_entry> apl;
-
m-relay
<doedl...:zano.org> auto begin = m_peers_anchor.get<by_time>().begin();
-
m-relay
<doedl...:zano.org> auto end = m_peers_anchor.get<by_time>().end();
-
m-relay
<doedl...:zano.org> std::for_each(begin, end, [&apl](const anchor_peerlist_entry &a) {
-
m-relay
<doedl...:zano.org> apl.push_back(a);
-
m-relay
<doedl...:zano.org> });
-
m-relay
<doedl...:zano.org> then:
-
m-relay
<doedl...:zano.org> m_peers_anchor.get<by_time>().clear(); //then clear m_peers_anchor from boost container (?)
-
moneromooo
Ah. Then it does look sorted since the input *looks* sorted in the first place. I'm not familiar with those fancy containers though.
-
» moneromooo away
-
m-relay
<doedl...:zano.org> Peer lists are stored in a boost container with type {anchor|white|gray}
-
m-relay
<doedl...:zano.org> I could not figure out where anchor list is COPIED before clearing it. Maybe I need to provide more context.
-
m-relay
<doedl...:zano.org> get_and_empty_anchor_peerlist(apl); needs to store its entries (in apl) before clearing it. But the mechanism is beyond my c++ skills.
-
m-relay
<doedl...:zano.org> sorry for the markdown.
-
m-relay
<doedl...:zano.org> get_and_empty_anchor_peerlist(apl); //net_node.inl#L:1836
-
m-relay
<rucknium:monero.social> Meeting time!
monero-project/meta #1223
-
m-relay
<rucknium:monero.social> 1) Greetings
-
m-relay
<articmine:monero.social> Hi
-
m-relay
<chaser:monero.social> hello
-
rbrunner
Hello
-
m-relay
<doedl...:zano.org> [btw antilt's nick today] seas
-
m-relay
<vtnerd:monero.social> Hi
-
m-relay
<jberman:monero.social> *waves*
-
m-relay
<gingeropolous:monero.social> hi
-
m-relay
<syntheticbird:monero.social> Hi
-
m-relay
<rucknium:monero.social> 2) Updates. What is everyone working on?
-
m-relay
<doedl...:zano.org> me: looked into anchor nodes logic.
-
m-relay
<rucknium:monero.social> me: Finished my MoneroKon talks for this weekend: "OSPEAD: Optimal Ring Signatures" and "Defeating Spy Nodes on the Monero Network", which is joint work with boog900
-
m-relay
<articmine:monero.social> I have completed the scaling and fee proposal for FCMP++ which I am presenting at MoneroKon 5 here in Prague
-
m-relay
<jberman:monero.social> me: destroying FFI types correctly ready for re-review, continuing allowing support for >8-input FCMP++ txs (includes grouping multiple FCMP++ proofs into one tx primarily so that proof construction doesn't take minutes for large txs), next reviewing outstanding PR's and will look deeper into reported bugs in FCMP++/Carrot
-
m-relay
<rucknium:monero.social> A few announcements:
-
m-relay
<rucknium:monero.social> On Monday, Douglas Tuman of MoneroTalk interviewed Luke Szramowski and Diego Salazar of Cypher Stack about their recent FCMP Divisors work (MoneroTalk episode 353):
rumble.com/v6uv9ol-moneros-fcmp-upg…alazar-of-cypher-stack-epi-353.html
-
m-relay
<rucknium:monero.social> This weekend is MoneroKon! Lots of interesting talks about Monero R&D. Schedule here:
cfp.twed.org/mk5/schedule
-
m-relay
<rucknium:monero.social> Someone created a new Twitter account that tweets updates from MRL. IMHO, they are doing a great job so far :)
xcancel.com/MoneroResearchL
-
m-relay
<rucknium:monero.social> Definitely much better than the time someone wrote MRL logs into the blockchain in protest of tx_extra 😉
-
m-relay
<vtnerd:monero.social> Me: finally implemented the old fee algorithm in LWS, thanks ArticMine:
-
m-relay
<rucknium:monero.social> 3) [SLVer Bullet: Straight Line Verification for Bulletproofs](
github.com/cypherstack/silver-bullet). [Cypher Stack review of divisors for FCMP](
github.com/cypherstack/divisor_deep_dive).
-
m-relay
<rucknium:monero.social> On Monday, sgp_ said:
-
m-relay
<rucknium:monero.social> > Quick heads up to for the room here. There were some questions about the CS silver bullet document, and this will likely (though not for certain) result in zkSec not having something "locked in" to review by the time we would need to lock them in for next week. In any case, I'll keep the room updated
-
m-relay
<rucknium:monero.social> > The ball appears to be back in our court now, thanks Brandon
-
m-relay
<rucknium:monero.social> Is the next step to look for firm(s) to review SLVer Bullet?
-
m-relay
<rucknium:monero.social> To perform a mathematical review, I mean
-
m-relay
<jberman:monero.social> I don't know if I have the latest info, but AFAIK, kayabanerve has some questions on the doc for CS. Those questions would need to be squared away before moving forward on contracting another firm to review
-
m-relay
<diego:cypherstack.com> We've been in contact and talking back and forth.
-
m-relay
<diego:cypherstack.com> May take a bit. Not too long.
-
m-relay
<rucknium:monero.social> Once those questions are resolved, would it be a green light to implement the needed code changes in the FCMP codebase and start searching for a review firm?
-
m-relay
<rucknium:monero.social> And who would take the task of implementing the code changes?
-
m-relay
<jberman:monero.social> That would probably be the ideal scenario
-
m-relay
<jberman:monero.social> We will see once those questions are resolved
-
m-relay
<jberman:monero.social> Also, once those are resolved, it's likely a green light to move forward on implementing a blinds cache, which would ideally be completed before a wider testnet/stressnet as well. So imo it will make sense to re-open the conversation on a wider testnet/stressnet fairly soon
-
m-relay
<rucknium:monero.social> Oh yes. Actually, it is the next agenda item
-
m-relay
<jberman:monero.social> Probably will line up with the end of the contest. On the contest, I've heard from one dev who may have a valid helioselene submission soon. But I have not seen any code yet
-
m-relay
<jberman:monero.social> No valid submissions at this point
-
m-relay
<rucknium:monero.social> More discussion on FCMP divisors before moving on to FCMP alpha stressnet?
-
m-relay
<jberman:monero.social> nothin from me
-
m-relay
<diego:cypherstack.com> Remind me the details of the contest?
-
m-relay
<rucknium:monero.social> Diego coming in with a late entry? :P
-
m-relay
<diego:cypherstack.com> Mebbe
-
m-relay
-
m-relay
<diego:cypherstack.com> Thx
-
m-relay
<jberman:monero.social> TLDR: We opened a contest to optimize 2 libs used for FCMP++, helioselene (100 XMR prize) and ec-divisors (250 XMR prize), open to anyone to participate, closes for submissions June 30th
-
m-relay
<diego:cypherstack.com> Hmmmm
-
rbrunner
If working day and night, in shifts?
-
m-relay
<diego:cypherstack.com> If contest closes with no submissions reopen once new divisors lib?
-
m-relay
<rucknium:monero.social> IIRC, if no submission achieves greater than 20% speedup over the reference implementation, then there is no prize awarded, by the way.
-
m-relay
<jberman:monero.social> possible
-
m-relay
<rucknium:monero.social> 4) FCMP alpha stressnet
-
m-relay
<rucknium:monero.social> It may be a good idea to create a checklist of tasks to be completed before alpha stressnet
-
m-relay
<rucknium:monero.social> jberman has a checklist of FCMP tasks, but I cannot recall the URL
-
m-relay
-
m-relay
<rucknium:monero.social> I suppose the checklist could include Blinds cache, new divisors computations, and fixing the testnet bugs that ofrnxmr encountered
-
m-relay
<jberman:monero.social> Yep: FFI PR merged, new divisors impl, blinds cache, squash a few bugs (sweep issues, error handling, ofrnxmr 's issue, and wallet scan issue also reported by plowsof ). We may also want support for >8-input txs but not a requirement (may invite scope creep to need more changes for weight handling)
-
m-relay
<rucknium:monero.social> Sounds great. Thanks for keeping track of all those tasks.
-
m-relay
<rucknium:monero.social> Anything more on FCMP alpha stressnet?
-
m-relay
<jberman:monero.social> Nothin here
-
m-relay
<rucknium:monero.social> 5) Disclosure of method to detect spy nodes.
monero-project/research-lab #126
-
m-relay
<rucknium:monero.social> At Monday's No Wallet Left Behind meeting, I asked jeffro256 if he was OK with boog900 and I disclosing boog900 's method for distinguishing spy nodes from honest nodes, at MoneroKon. He was Ok with it
-
m-relay
<doedl...:zano.org> after PR is merged ?
-
m-relay
<rucknium:monero.social> No, before the PR is merged. Our spy node talk is scheduled for Sunday
-
rbrunner
Won't be merged at MoneroKon
-
m-relay
<rucknium:monero.social> That's the plan. I think it would be ok, or even desirable, to post the information and make the repo public before then. I don't want to make this too much of a dramatic "show" revelation, since it is privacy-related information, not a shiny new product or something.
-
m-relay
<rucknium:monero.social> By "that's the plan" I mean the plan is to include it in the spy node talk
-
m-relay
<boog900:monero.social> I can make the code public now?
-
m-relay
<rucknium:monero.social> MRL has requested that users "trust" the ban list for over six months now, without verifying the method
-
m-relay
<rucknium:monero.social> IMHO, I think it would be fine to switch the repo to public.
-
m-relay
<rucknium:monero.social> By the way, I will start daily data gathering of reachable nodes on the network. It's just good data to have available in the future, but more importantly, it could help figure out if the spy nodes try to move to another set of IP addresses if they were to patch their spy fingerprint.
-
rbrunner
Yeah, why not. May also motivate to review my PR
-
m-relay
<boog900:monero.social> ok I am going to make it public
-
m-relay
-
m-relay
<boog900:monero.social> The spy nodes leak the peer_id of the nodes they proxy from during a ping
-
rbrunner
Chuckle
-
m-relay
<rucknium:monero.social> Here is boog900 's draft explanation for how it works:
-
m-relay
<rucknium:monero.social> ```
-
m-relay
<rucknium:monero.social> Every node in the Monero P2P network has a self-assigned 64-bit identifier called a peer_id. This peer_id is
-
m-relay
<rucknium:monero.social> randomly generated at startup and stays static until the node is shutdown[^1].
-
m-relay
<rucknium:monero.social> The peer_id is shared in handshake (request and response) and ping (just response) messages. When a node does a handshake,
-
m-relay
<rucknium:monero.social> the peer_id it returns, with high probability, should not match with any other peers on the network. For proxy
-
m-relay
<rucknium:monero.social> nodes this is the same, the peer_id they return will be unique, and it will also be constant across connection attempts.
-
m-relay
<rucknium:monero.social> However, when a ping is sent to a proxy node, they return a peer_id that does not match the one they sent during the
-
m-relay
<rucknium:monero.social> handshake. This peer_id is going to be called the inner peer_id compared to the outer one they give during a handshake.
-
m-relay
<rucknium:monero.social> There are two classes of proxy nodes that have been detected:
-
m-relay
<rucknium:monero.social> - Class A: these nodes have inner peer_ids that directly match another real node's peer_id. These nodes are not a part
-
m-relay
<rucknium:monero.social> of the big subnets and are the single IP addresses.
-
m-relay
<rucknium:monero.social> Hopefully that didn't hurt the IRC side too much
-
rbrunner
It's ok
-
m-relay
<rucknium:monero.social> I will add this text to the draft subnet deduplication MRL bulletin soon.
-
m-relay
<syntheticbird:monero.social> great explanation
-
m-relay
<rucknium:monero.social> jhendrix: ^ Here is the method to identify spy nodes on the Monero network.
-
m-relay
<rucknium:monero.social> I pinged you because you did the Maldo map research about them.
-
m-relay
<syntheticbird:monero.social> i know no one asked but fai the proxies are written in java
-
m-relay
<rucknium:monero.social> Great job everyone who worked on the spy node identification! Especially boog900 , of course
-
m-relay
<rucknium:monero.social> "fai"?
-
m-relay
<syntheticbird:monero.social> for anyone interests
-
m-relay
<rucknium:monero.social> 6) CCS proposal: Monero Network Simulation Tool.
repo.getmonero.org/monero-project/ccs-proposals/-/merge_requests/589
-
m-relay
<rucknium:monero.social> Were gingeropolous and 0xfffc able to have a conversation about network simulation requirements?
-
m-relay
<gingeropolous:monero.social> no, there was no movement on this from my end unfortunately.
-
m-relay
<rucknium:monero.social> Ok. In the next few days will try to contact the developer of EthShadow about the amount of work that could be involved, whether he could possibly implement it, and at what cost.
-
m-relay
<rucknium:monero.social> * I will try to contact
-
m-relay
<rucknium:monero.social> 7) Peer Scoring Metrics.
-
m-relay
<doedl...:zano.org> In a nutshell, anchor_list stores a snapshot of outgoing connections with a uniq first_seen field. connections_maker() uses anchor_list first (before white_list and gray_list). Anchor peers may therefore telescope back to the first and most reliable peers a node has seen.
-
m-relay
<doedl...:zano.org> "When the node restarts to establish outgoing connections, it will give priority to the peer node with the smallest first_seen field in anchor_list." Shi [1], p.16 (Appendix B) claims there might be a logic error in the source, likely in get_and_empty_anchor_peerlist(apl) if apl is a reference to an empty object.
-
m-relay
<doedl...:zano.org> Hu [2] points out that a single anchor node connection (not vulnerable to gray_list spam) may prevent an eclipse. Anchor nodes can protect against diffamation-style counter-attacks [1] when taking more punitive action, i.e disconnecting or blacklisting misbehaving nodes.
-
m-relay
<doedl...:zano.org> Afaik there is no way to list anchor nodes with the --print_pl command atm.
-
m-relay
<doedl...:zano.org> Refs:
-
m-relay
<doedl...:zano.org> [1] Shi, R., Peng, Z., Lan, L., Ge, Y., Liu, P., Wang, Q., & Wang, J. (2025). Eclipse attack on menero’s peer to peer network. In Proceedings of Network and Distributed System Security Symposium (NDSS).
-
m-relay
-
m-relay
<doedl...:zano.org> [2] Security Analysis of Monero’s Peer-to-Peer System
-
m-relay
-
m-relay
<rucknium:monero.social> diffamation = defamation?
-
m-relay
<rucknium:monero.social> (If so, remember _not_ to edit this long post on the Matrix side because it spams the IRC side)
-
m-relay
<rucknium:monero.social> So is anchor list mostly relevant when restarting a node? The anchoring criteria is just a low last_seen value?
-
m-relay
<doedl...:zano.org> defamation = getting nodes to disconnect honest peers
-
m-relay
<doedl...:zano.org> that depends on the handling of anchor_list.
-
m-relay
<doedl...:zano.org> atm yes.
-
m-relay
<rucknium:monero.social> By the way, jhendrix produced an interesting and thorough analysis of network privacy problems on Zano mainnet. Tor hidden service link accessible through Tor Browser:
g7cpug4k6ydyq5dlxrji35xnfq5n5rba3n7holux4tmdsm42ju543tad.onion
-
m-relay
<rucknium:monero.social> AFAIK, Zano is considered a Cryptonote-style blockchain like Monero. But Zano doesn't use the privacy-improving Dandelion++ protocol for transaction propagation.
-
m-relay
<doedl...:zano.org> I could not verify if apl is a reference to an empty object, btw
-
rbrunner
Yes, Zanbo ultimately derives from CryptoNote, like Monero
-
rbrunner
*Zano
-
m-relay
<rucknium:monero.social> I guess one could try to test that in a debugger
-
rbrunner
I can recommend to analysis
-
rbrunner
*that
-
m-relay
-
m-relay
<doedl...:zano.org> m_peers_anchor.get<by_time>().clear(); //then clear m_peers_anchor from boost container (?)
-
m-relay
<rucknium:monero.social> flip flop: Thank you for looking into the anchor list :)
-
m-relay
<rucknium:monero.social> By the way, did you find the "Security Analysis of Monero’s Peer-to-Peer System" paper through an internet search or through MoneroResearch.info?
-
m-relay
<doedl...:zano.org> de nada. sounds unlikely to me.
-
m-relay
<doedl...:zano.org> std::vector<anchor_peerlist_entry> apl; // is this a reference or a new object
-
m-relay
<rucknium:monero.social> Just wanting to check the usefulness of MR.info :)
-
m-relay
<doedl...:zano.org> it IS useful. But I used google.scholar
-
m-relay
<rucknium:monero.social> More discussion on this topic for now?
-
m-relay
<rucknium:monero.social> We can end the meeting here. Thanks everyone
-
m-relay
<syntheticbird:monero.social> thanks
-
rbrunner
doedl: I don't see any problem with the code of `get_and_empty_anchor_peerlist` method and they way it gets called. Maybe I overlook something
-
m-relay
<syntheticbird:monero.social> delicious meeting
-
rbrunner
With "std::vector<anchor_peerlist_entry> apl;" you have a perfectly fine vector, just with zero elements
-
rbrunner
You can hand that to the method, and it will fill it, as a reference parameter is used
-
m-relay
<doedl...:zano.org> yes and it gets filled later
-
m-relay
<articmine:monero.social> Thanks
-
rbrunner
The method name tells exactly what happens
-
m-relay
<doedl...:zano.org> for_each(...) // fill
-
rbrunner
Right
-
m-relay
<doedl...:zano.org> thats what I assumed all along
-
m-relay
<doedl...:zano.org> tx - very important to me
-
rbrunner
Just checked in the debugger, I have that set up for debugging my PR - looks all ok, no "logic error" in sight if you ask me
-
m-relay
<doedl...:zano.org> It keeps the "oldest" peers around (might be seed nodes even) and uses 2 of them with priority.
-
m-relay
<doedl...:zano.org> That adds tremendously to Monero's resiliance imho