-
br-m
<soh01:matrix.org> this*
-
br-m
<soh01:matrix.org> Hi, is there where the lab meeting will proceed?
-
UkoeHB
soh01: yes, in about 12hr
-
br-m
<soh01:matrix.org> thanks Ukoe
-
br-m
<fatcow:matrix.org> tevador: might be interesting for your channel proposal > <@fatcow:matrix.org>
mrelay.p2pool.observer/m/matrix.org/lcKJXQKuTumeomzRdZCdShvH.zip (monero-channel-lean-proofs.zip)
-
br-m
-
br-m
<rucknium> It was already shared in the #no-wallet-left-behind:monero.social channel.
-
br-m
<rucknium> MRL meeting in this room in two hours.
-
br-m
<rucknium> Meeting time!
monero-project/meta #1431
-
br-m
<rucknium> 1. Greetings
-
br-m
<vtnerd> hi
-
br-m
<boog900> hi
-
DataHoarder
hallo
-
tevador
Hi
-
rbrunner
Hello
-
br-m
<jpk68:matrix.org> Hello
-
br-m
<syntheticbird> Hi
-
br-m
<rucknium> 2. Updates. What is everyone working on?
-
br-m
<jfuffjcjkdrngisozkfng:matrix.org> Hi
-
br-m
<jberman> waves
-
br-m
<rucknium> me: Keeping stressnet stressed and investigating bugs on it. Read Shi, Zhang, Ge, Lan, Zhang, & Wang (2026) "Deanonymizing Monero Transactions in Tor Network." (
arxiv.org/abs/2607.07062)
-
br-m
<articmine> Hi
-
DataHoarder
stressnet/scanning updates and checking all the new incoming changes to FCMP++/Carrot for post-stressnet changes (and updating my libraries)
-
tevador
me: mx25519 + relative time-locks
-
br-m
<vtnerd> me: hopefully done with p2p-write-starvation, and working on checking all my outstanding prs/branches (mainly ssl and fcmp++)
-
br-m
<boog900> I posted an update on Cuprate's RPC here:
monero-project/meta #1428#issuecomment-5107322419 it has graphs which compares how both scale with more wallets, thought it could interest some people here.
-
br-m
<jpk68:matrix.org> Me: continued work on I2P-related things, reviewing a few PRs, squashing some bugs in hardware wallet code
-
br-m
<gingeropolous> me: started using monerosim to test some things. fiddled with / added cuprate support
-
br-m
<jberman> me: continuing FCMP++ integration PR, the Trail of Bits audit was released:
github.com/trailofbits/publications…nerofcmp++crypto-securityreview.pdf. With @rucknium's help, should hopefully have beta stressnet v2.1 out by next week that solves the wallet's sporadic errors (reviewing to make sure all fixes are working as intended)
-
br-m
-
br-m
<rucknium> Agenda item 3 ^
-
br-m
<rucknium> Last meeting, some participants wanted to wait for the Trail of Bits audit before making decisions on some FCMP timeline items. It's here now:
github.com/trailofbits/publications…nerofcmp++crypto-securityreview.pdf
-
br-m
<rucknium> Is right now a good time to discuss it?
-
br-m
<jberman> Here's the latest FCMP++ integration PR with some discussion there on next steps to get that code in:
monero-project/monero #10359
-
br-m
<jberman> Sure
-
br-m
<rucknium> Does anyone want to elaborate on what Trail of Bits means by the Rust-C++ Foreign Function Interface (FFI) being "fragile"?
-
br-m
<rucknium> And that was the only issue they found that was not completely resolved by a fix.
-
br-m
<jberman> They mean that if the upstream type changes and/or is written to on the C/C++ side, it may be rendered incorrect. Since the upstream type comes from another lib (a fork of crypto-bigint), we'd have to be careful of that occurring. The static asserts included are a strong defense in the event of such a scenario
-
br-m
<rucknium> I will ping @jeffro256:monero.social too
-
br-m
<syntheticbird> I like their concerns but serialization would kill performance
-
DataHoarder
unsafe{ performance }
-
br-m
<rucknium> So we need version pinning on the external library. I think you already do that anyway.
-
br-m
<jpk68:matrix.org> It would be nice if the code could be vendored into a separate repo (not src/fcmp_pp/fcmp_pp_rust, I mean the dependencies)
-
DataHoarder[m]
@jpk68:matrix.org: Given that even this recent PR had mismatching versions of several core packages, vendoring critical dependencies would be a plus
-
br-m
<jberman> @rucknium: Yes, we do pin versions. We'll probably need to update to a more recent version of the upstream lib at some point (I think we need to already), and so we'd want to double check it with that latest version we update to
-
DataHoarder[m]
Changes to these would be more obvious in reviews and allow dev copies in other platforms to not depend on crates.io or the specific git/forge they are stored, but have code local
-
br-m
<rucknium> IIRC, @tobtoht:monero.social is keen on vendoring external libraries.
-
br-m
<syntheticbird> rightfully
-
br-m
<rucknium> More comments about the ToB audit?
-
br-m
<jberman> Vendoring sounds fine to me. @kayabanerve:matrix.org may have thoughts there too
-
rbrunner
So watching the original libs for importing changes to "vendor in" again is the lesser evil?
-
DataHoarder[m]
About the uninitialized receiver/output, that's a kind of scary find. I found similar issues on other languages/code while implementing parts of Monero (which caused some fun aftermath
words.filippo.io/dependabot )
-
DataHoarder[m]
ToB recommends additional steps to prevent issues like this in the future/more static tooling. Would that sort of hardening be sought for?
-
br-m
<jpk68:matrix.org> I would also like to bring up the impact of FCMP++ Rust code on binary sizes. I seem to remember tobtoht suggesting we remove the 'utility' binaries from release archives on the site to save space because of the increase.
-
DataHoarder[m]
Specially as a lot of the Monero crypto code, while sounds, comes from the legacy times where it was all uncommented single-letter variables, which took time to untangle (see biased hash / elligator 2 for the hash to point / key image)
-
br-m
<jpk68:matrix.org> IMO, we should reconsider applying the strip option to the release profile, and maybe fat LTO
-
br-m
<jberman> Imo more relevant than the ToB audit as it relates to FCMP++ audit work generally:
-
br-m
<jberman> @xmrack:monero.social identified a detectable double spend vuln in the consensus integration code, highlighted here:
seraphis-migration/monero #446
-
br-m
<jberman> This (consensus integration) would have fallen under the scope of "Phase 3" in the integration audit plan
-
br-m
<rucknium> If I may ask, did an LLM assist with finding @ack-j:matrix.org 's bug?
-
DataHoarder[m]
👍️ > <@jberman> @xmrack:monero.social identified a detectable double spend vuln in the consensus integration code, highlighted here:
seraphis-migration/monero #446
-
br-m
<rucknium> Trying to understand the role of LLMs in finding these types of bugs.
-
br-m
<jeffro256> Howdy, sorry I'm late
-
br-m
<jberman> @rucknium: Yes
-
br-m
<syntheticbird> what LLM ?
-
br-m
<jeffro256> He mentioned using Opus on a different FCMP report
-
br-m
<jeffro256> So maybe Opus?
-
sech1
It doesn't matter, all of the available top-tier LLMs should be used to check this code for vulnerabilities. And multiple times.
-
br-m
<syntheticbird> alr
-
br-m
<syntheticbird> sech1, i agree on that and i am not trying to frame one model to be better than another, it's just curiosity.
-
br-m
<jberman> sech1: I'm in favor of this as well
-
br-m
<syntheticbird> speaking of LLM audit I came across
github.com/evilsocket/audit recently
-
br-m
<syntheticbird> for those who have the tokens probably worth a try
-
DataHoarder
that looks neat for a more automated setup
-
br-m
<rucknium> Just thinking out loud: If today's LLM catches critical bugs now, and tomorrow's LLM is even better, then what happens when tomorrow's LLM finds a critical bug after the hard fork occurs?
-
br-m
<rucknium> I don't like this new reality :(
-
DataHoarder[m]
There should not be just LLM review, it's in addition to any other normal reviews
-
br-m
<syntheticbird> Continuing on thinking loud: useless to recall how blueteam and other malicious actors caused a surge in critical vulnerability exploits on many DeFi projects when Opus started coming out
-
br-m
<syntheticbird> blueteam = v12 = zellij
-
br-m
<syntheticbird> zellic*
-
DataHoarder[m]
@rucknium: This can be changed to "If today's cryptographers catches critical bugs now, and tomorrow's cryptographers learn new research then what happens when tomorrow's cryptographers finds a critical bug after the hard fork occurs?" and still has the same meaning, use all available way to audit and protect/cover.
-
br-m
<gingeropolous> difference is, joe shmoe can run an llm ... but joe shmoe isn't a cryptographer
-
br-m
<rucknium> Does Monero code need to do what aerospace code does and over-engineer all the code and code-writing processes in safety-critical areas?
-
DataHoarder[m]
☝️ > <@rucknium> Does Monero code need to do what aerospace code does and over-engineer all the code and code-writing processes in safety-critical areas?
-
br-m
<vtnerd> I would also expect diminishing returns on the llm advancement, but that's just a fut feeling
-
br-m
<vtnerd> *gut
-
DataHoarder[m]
There's areas that can be upgraded/covered and others that cannot without consensus-breaking changes (or tightening that need to be hidden)
-
br-m
<boog900> You would be asking for like a full rewrite :)
-
br-m
<jeffro256> We could have said the same thing about cryptographic research by humans, albeit on a slower timeline. If cryptographic knowledge gets better and better, what hppens when people figure out ways to break current cryptography? The answer has to be vigilance and the constant cat-and-mouse game, like it always has been
-
br-m
<syntheticbird> @boog900: yeah this lmao
-
DataHoarder[m]
Specially if you cannot "hide" such changes in patches like done in the past (for example, the double-spend bug related to twisted outputs)
-
rbrunner
This boomer would advice, in addition to everything already said, to take each and every chance to avoid complexity
-
br-m
<rucknium> We are at a specific inflection point in time. Like when old-style crypto was being broken.
-
selsta
not sure if this was linked yet but ack-j also has a fundraiser for fuzzing, including fcmp++ (though afaik this won't include LLMs, just regular fuzzing)
donate.magicgrants.org/monero/projects/fuzzing-monero-2
-
br-m
<syntheticbird> DataHoarder[m]: well there was an instance of hiding failure
-
br-m
<syntheticbird> in the past
-
br-m
<rucknium> I don't mean to throw a wrench in the gears, but there have been at least 3 privacy coin counterfeiting bugs revealed this year (Litecoin MWEB, Zcash Orchard, Beam).
-
DataHoarder[m]
And with today's automation flows you can even review binary changes and recover original flow/intent to do even tighter analysis/diffing across releases to catch not mentioned changelog items.
-
br-m
<syntheticbird> @rucknium:monero.social, I agree with you that crypto out of all other domains are the ones being hit the hardest on AI vulnerability findings because of the extreme investment to reward ratio. We can't just ignore it
-
DataHoarder[m]
@rucknium: Then I'd repeat my above concern with the uninitialized output, which could have caused "fun" issues, and work on ways that such issues could have been captured early on
-
br-m
<syntheticbird> i sounds like an AI bro and I hate it
-
DataHoarder[m]
Some process that can run concurrently, or within PRs as well in a lighter form, and generally review incoming areas or overall integration using classical methods or anything needed. Even pointing out general "Smell" should be a cause of concern if we are talking about safety-critical areas.
-
br-m
<rucknium> Full disclosure: I sort of predicted this problem and my old mindset is coming back. I'm not a cryptographer nor a real programmer, so what do I know? :D
-
br-m
<syntheticbird> DataHoarder[m]: generally my philosophy is that if safety is critical, your must increase formal verification coverage
-
br-m
<jpk68:matrix.org> Sorry for bringing this up for the hundredth time, but as others have stated, it's extremely important to reduce unnecessary code complexity (which can shelter exploits). I think introducing Rust with FCMP++ is doing exactly the opposite of this; potentially investing in the code being rewritten to avoid such complexity would maybe be worthwhile.
-
br-m
<boog900> No that would take too long
-
br-m
<jpk68:matrix.org> FCMP++ already brings a huge number of changes in critical pathways; the FFI stuff is not helping the matter
-
DataHoarder[m]
@syntheticbird: then such formal verification should be in PR, I agree. And that should be included along
-
br-m
<jpk68:matrix.org> @boog900: Not before the hardfork per se, I just mean eventually
-
br-m
<boog900> eventually I agree
-
br-m
<boog900> I want multiple impls
-
br-m
<jpk68:matrix.org> I would totally be against delaying the hardfork for that
-
br-m
<syntheticbird> @boog900: I want variable time for nodes
-
DataHoarder[m]
> <@jpk68:matrix.org> Sorry for bringing this up for the hundredth time, but as others have stated, it's extremely important to reduce unnecessary code complexity (which can shelter exploits). I think introducing Rust with FCMP++ is doing exactly the opposite of this; potentially investing in the code being rewritten to avoid such complexity would maybe be worthwhile.
-
DataHoarder[m]
I generally agree that the Rust monero-oxide/Cuprate rewrite is vastly easier to read/follow than C++ specially when using undocumented load-bearing crypto operations from cryptonote era :)
-
br-m
<jpk68:matrix.org> selsta: And fuzzing as well, of course ^
-
br-m
<syntheticbird> its 44 shouldn't we move to another topic ?
-
br-m
<syntheticbird> @rucknium:monero.social:
-
br-m
<boog900> On the list of big C++ work that needs to be done I wouldn't put an FCMP rewrite high though
-
br-m
<rucknium> IIRC, @jeffro256:monero.social wanted to get input on timeline for integration audit parts 2 and 3
-
br-m
<rucknium> So we should get that input in this agenda item unless @jeffro256:monero.social does not want it at this meeting.
-
br-m
<jeffro256> Yes, I asked the question last MRL IIRC, whether the 6-month wait period should depend on the completition of audit parts 2 and 3. I don't think it should, but I think we should plan for audits 2 and 3 to completelt at least 3 months before the HF activation date, and plan for a period of follow-up development where we fix issues, if any, from those audits parts.
-
br-m
<rucknium> And we were promised a Gantt chart :)
-
br-m
<jeffro256> ;)
-
br-m
-
br-m
<syntheticbird> lmao
-
br-m
<jberman> @jeffro256: I have the same view
-
br-m
<jeffro256> Some people wanted to see the first audit report findings before making the decision. I think that link has already been shared, correct?
-
br-m
<syntheticbird> Yes > <@rucknium> Agenda item 3 ^
-
br-m
<syntheticbird> below i miss click
-
br-m
<rucknium> @jeffro256: Yes
-
br-m
<jeffro256> With that current Gannt chart I shared, according to discussions in NWLB yesterday, I have the 6-month wait period before HF activation depend on the first HF-enabled merge to master. I have a 1 month node/p2p/consensus code freeze dependent on that merge too. I have a 2 month code freeze on wallet features and any audit-related follow-up development before the HF activation
-
br-m
<jeffro256> Does all of that sound reasonable?
-
br-m
<rucknium> @jeffro256:monero.social: Thanks for the detailed chart
-
br-m
<rucknium> @jeffro256: Sounds ok to me
-
br-m
<jeffro256> That puts FCMP++ HF activation at the beginning of February if we stay on this schedule
-
br-m
<rucknium> Anyone else want to comment on @jeffro256:monero.social 's proposed plan?
-
br-m
<jeffro256> Which means locking in for a lot of code merging for the next month
-
br-m
<rucknium> And if not, anything else to discuss during this agenda item?
-
br-m
<rucknium> 4. Relative locks with FCMP++ (
monero-project/research-lab #161).
-
br-m
<rucknium> tevador
-
tevador
I posted updates on github. I don't want to delay the meeting, so the only thing I'd like to discuss is this proposal:
monero-project/research-lab #161#issuecomment-5100079175
-
br-m
<rucknium> I have a question about tx distinguishability with the payment channel relative locks. Do the payment channel lock txs have to set the FCMP tree anchor when they are created, or can they be updated with pre-signing?
-
br-m
<rucknium> Maybe my question isn't very clear, but I hope I conveyed what I was getting at.
-
tevador
No, the FCMP tree anchor is always selected just prior to tx submission.
-
br-m
<rucknium> Thanks.
-
tevador
The FCMP "reference_block" field is not signed with the spend authorization proof.
-
rbrunner
Would a soft-introduction of such locks mean that we would have a mixed network, some nodes would honor the locks, some not? And if yes, would that fly?
-
rbrunner
*soft-fork-introduction
-
tevador
That's not how soft forks work. Soft fork activates when >50% of miners start following the rule. Everyone else then follows the longest chain.
-
br-m
<jeffro256> > <tevador> I posted updates on github. I don't want to delay the meeting, so the only thing I'd like to discuss is this proposal:
monero-project/research-lab #161#issuecomment-5100079175
-
br-m
<jeffro256> I think that the idea in this PR
seraphis-migration/monero #445 is fine. Since, the non-standard behavior happens when unlock_time=1, restricting the unlock_time to equal 0 is a soft-fork back to standard behavior.
-
br-m
<rucknium> By the way, we know roughly what percentage of spent outputs are more than 24 hours old, thanks to the OSPEAD estimates. It is 1/3rd.
-
br-m
-
rbrunner
Ah I see, that's a difference to normal functionality introduced in updates.
-
tevador
For Bitcoin, ~20% of spends are >24 hours
-
br-m
<boog900> IMO I don't think we really need or should have decoys which say they were locked when they were not.
-
br-m
<jeffro256> Makes sense. Higher volume coin, which has more exchanges per user, has lower median spend time
-
tevador
I think we don't need to discuss the details of time-locks now, only if it's worth reserving unlock_time = 1 for it.
-
br-m
<boog900> I am ok with reserving unlock_time = 1
-
br-m
<rucknium> @boog900:monero.social: I am leaning toward your position on that. You are kind of forcing some users to disclose to their tx recipients that their outputs are more than 24 hours old. That's a small privacy leak, but it's a little unfair because it's for the benefit of the payment channel users.
-
br-m
<jeffro256> I am also okay with it as long as no reference wallet software uses it
-
rbrunner
Uses it? How could that happen?
-
br-m
<rucknium> @jeffro256:monero.social: Also Monero has its 10-block lock and you cannot spend txs in the same block. IIRC, about 8% of BTC outputs are spent in the same block they are created in.
-
br-m
<boog900> @rucknium: Exactly, especially as, from what I read in the proposal, locked txs are only published in the case where there is misbehaviour
-
tevador
Btw, only payment channel force closes reveal use unlock_time = 1, which would presumably be a tiny percentage of all payment channel closes.
-
br-m
<jberman> A risk with the proposed upgrade plan IIUC: if a minority of nodes update, then start seeing txs with unlock_time=1 and reference_block<720, then those nodes would be split from the network
-
br-m
<jeffro256> Also, ostensibly , in a payment channel close, the tx output recipients would be yourself, so you're not leaking that info to a counterparty
-
br-m
<rucknium> IMHO, tx heterogeneity matters most when it's a consistent pattern for every tx created by a user's wallet. If a user creates an unusual tx once, but not before or afterward, then you don't have the tx linking issue.
-
tevador
jberman: that's a general soft fork issue, not really related to the proposal. Generally, soft forks activate based on >>50% miners signaling support.
-
tevador
To clarify: if >50% of miners support the soft fork, non-updated nodes follow the rule because the longest chain follows the rule.
-
br-m
<jberman> Fair
-
br-m
<rucknium> Is it intended to change the name of the unlock time variable in the code to reduce confusion?
-
br-m
<jberman> I'm OK with reserving unlock_time = 1 also
-
br-m
-
tevador
I think it's OK to keep the name "unlock_time".
-
br-m
<earthman:unredacted.org> sech1: Take a look at your donos. Stay silent about the amount please
-
br-m
<earthman:unredacted.org> @earthman:unredacted.org: It is for monero audits, P2Pool and a part for yourself
-
br-m
<earthman:unredacted.org> You can share with DataHoarder[m] if you want
-
br-m
<rucknium> More discussion of this item?
-
DataHoarder[m]
🙇 > <@earthman:unredacted.org> You can share with DataHoarder[m] if you want
-
br-m
<rucknium> 5. Shi, Zhang, Ge, Lan, Zhang, & Wang (2026) "Deanonymizing Monero Transactions in Tor Network." (
arxiv.org/abs/2607.07062)
-
br-m
<rucknium> @jpk68:matrix.org and @syntheticbird:monero.social
-
br-m
<syntheticbird> I've read the paper and I have a piece to say
-
br-m
<jpk68:matrix.org> I did end up looking through the paper, and from what I can tell, the heuristics outlined are mostly legit. It's basically a three-part pipeline that attempts to correlate outgoing transactions to Tor identifiers, and then those identifiers to IP addresses.
-
br-m
<jpk68:matrix.org> The first out of three was indeed patched well over a year ago (by vtnerd in #9632), which seems to fix the issue of hidden-service nodes leaking their own onion addresses
-
br-m
<rucknium> I read this paper. I want to give others the opportunity first to comment
-
br-m
<syntheticbird> @jpk68:matrix.org: I disagree
-
br-m
<jpk68:matrix.org> However, the other two appear to be unpatched to this day. The remaining heuristics include the fact that proxies are not chosen uniformly from "neighbour" peers (instead, based off of a self-reported and unverified block height parameter), and there is also no rate limit sync/ping messages, which lets Tor relays see a timing [... too long, see
mrelay.p2pool.observer/e/wOPvxJsLdFB2WDFr ]
-
br-m
<jpk68:matrix.org> So, if I understand correctly, we should immediately try to patch the proxy selection bias (and also add more checks for false self-reported block heights), plus add rate limits for random timed sync request flags per connection
-
tevador
The fake-height bias is quite puzzling to me, I couldn't find it in the code.
-
br-m
<rucknium> I don't know how to fix the fake-height bias except to ask the Tor peer to send all the "new" blocks over Tor, which would take a while. And it's only an attack-augmenting technique. Just reduces the number of machines you need to execute the attack.
-
br-m
<syntheticbird> From my understand the fix from vtnerd was to shuffle the onion address place in the local peerlist being sent at TSR. But unless my understand is incorrect, this do not remove the fact that the onion address is being sent at every TSR. Which makes it longer to correlate but still doable.
-
br-m
<jpk68:matrix.org> tevador: The code I looked at for this was in cryptonote_protocol_handler.inl, lines 456 to 494
-
br-m
<jpk68:matrix.org> There appears to be no upper bounds check in process_payload_sync_data()
-
br-m
<rucknium> @syntheticbird:monero.social: You mean you could keep requesting peer lists and see which peer address always appears in every response?
-
br-m
<syntheticbird> @rucknium: Exactly.
-
br-m
<syntheticbird> I think the paper is elegant and exploit weaknesses effectively. I will not able to convince people here that will consider this as a nothing burger because you need to workout with adversarial Tor guards.
-
br-m
<jpk68:matrix.org> @syntheticbird: IIUC, this still mostly fixes the first step out of three, yes?
-
br-m
<syntheticbird> I think the Tor Project is compromised and this paper actually shows an attack that while not scaling to the entire network can be added to the arsenal of Chainanalysis and Co
-
tevador
jpk68: I read that and I don't think that's it.
-
br-m
<syntheticbird> @jpk68:matrix.org: This only make the correlation takes longer, it do not erase it
-
br-m
<rucknium> IMHO, compromising the Monero node's Tor guard node is the least plausible part of the attack. Not feasible without a lot of machines. Tor specifically tries to defend against that.
-
br-m
<syntheticbird> identity_role stage
-
br-m
<jpk68:matrix.org> Yeah, but it eliminates the ability for it to be done passively
-
tevador
The correct fix for the onion address leak would be to insert own address before truncating the list to 250 peers.
-
br-m
<syntheticbird> @rucknium: That is if you believe Tor project to be genuine but that is another topic entirely. There multiple points i would like to address
-
tevador
With randomized insertion*
-
br-m
<rucknium> But IMHO, even if you don't get the true IP address of the node, you could probably still link a user's txs together if they come from the same node. So there are still issues to be addressed.
-
br-m
<boog900> this
github.com/monero-project/monero/bl…ote_protocol/levin_notify.cpp#L151? > <tevador> The fake-height bias is quite puzzling to me, I couldn't find it in the code.
-
br-m
<monerobull:matrix.org> What would you guys recommend if the goal is to hide transaction origins and you don't care about the ISP knowing you run a node? --proxy, --tx-proxy (even though there is this attack, or maybe even both?
-
br-m
<rucknium> I liked that they "defeated" the noise protocol by actively sending timed messages. But the noise protocol wasn't intended to defeat an active adversary. It was designed to hide info from a passive ISP_level observer AFAIK.
-
br-m
<vtnerd> the biggest issue with linking tx to identity is that you can effectively “break” the ring. this closes with fcmp++
-
br-m
<syntheticbird> I join you @rucknium:monero.social, The bias selection is the most serious issue in my opinion and I would go as far as saying this bother me that they can so easily distribute 5000 new onion addresses to a node and it not asking any questions.
-
br-m
<boog900> @boog900: maybe should add a few blocks of allowance
-
br-m
<syntheticbird> Understand by that that I think the node should do some basic sanity check and reject a peerlist if its entirely composed of onion addresses it never heard of (at least when its own peerlist is full)
-
br-m
<rucknium> @syntheticbird:monero.social: I also liked that the paper gave a specific hardware requirements list to Sybil attack Monero onion hidden services. That's a point that @boog900:monero.social and I made in our MoneroKon presentation last year, but we didn't have the numbers.
-
DataHoarder[m]
@syntheticbird: in P2Pool we only add onion addresses when they get included in a share (which has certain POW) and these timeout after a while when they leave certain window
-
DataHoarder[m]
not doable here, ofc, as otherwise spamming onions is free
-
br-m
-
br-m
<syntheticbird> @rucknium: where ?
-
tevador
boog900: Thanks, that looks like it.
-
br-m
<rucknium> The hardware requirements are on page 9
-
br-m
<syntheticbird> Or right thanks I skipped that part
-
br-m
<syntheticbird> the hardware part
-
br-m
<syntheticbird> and forgot about it
-
br-m
<syntheticbird> DataHoarder[m]: why wouldn't it be doable ?
-
br-m
<boog900> We could not share onion addresses with connections we intend to send txs to at all and close the connection after 1 tx
-
DataHoarder
you'd need to attach these onions to some sort of timed pow that adjust based on a rate, so... monero blocks :)
-
br-m
<jpk68:matrix.org> The paper also mentioned some mitigations (which are beyond my understanding) related to extending the Dandelion++ stem phase ambiguity
-
br-m
<boog900> @boog900: litterally just send the tx
-
DataHoarder
mining a monero block to get included is quite expensive
-
br-m
<vtnerd> > <@rucknium> I liked that they "defeated" the noise protocol by actively sending timed messages. But the noise protocol wasn't intended to defeat an active adversary. It was designed to hide info from a passive ISP_level observer AFAIK.
-
br-m
<vtnerd> they do this to get the last peer (which has been patched), how is this still effective? you’d need a passive+active adversary to use timed sync messages … ?
-
br-m
<syntheticbird> DataHoarder i get it thx
-
br-m
<rucknium> The paper says to 1) Eliminate the own-address identification (at least partially addressed already) 2) Extend the Dandelion++ protocol to the Tor tx-relay side (would slow down tx propagation and be complicated to implement), and
-
br-m
<rucknium> 3. Limit the timed sync requests in the Noise protocol to prevent the active watermarking of tor connections.
-
br-m
<syntheticbird> Yeah I am impressed by the watermarking part
-
br-m
<rucknium> @boog900: @boog900:monero.social: How persistent are Monero peer IDs on the Tor side?
-
br-m
<syntheticbird> This is the type of attack you would never thinkg about because of how cumbersome it sounds yet it works
-
br-m
<boog900> everyone sets a PeerID of 1
-
tevador
on tor, peer id = 0, no?
-
tevador
1*
-
br-m
<syntheticbird> @syntheticbird: All peer id are 1
-
br-m
<syntheticbird> wrong answer + lag
-
br-m
<boog900> how does bitcoin protect itself?
-
br-m
<boog900> or does it not? It allows everything over Tor too
-
br-m
<syntheticbird> I don't think it does
-
br-m
<boog900> blocks etc
-
br-m
<syntheticbird> May I propose a radical solution to resolve 2 and 3
-
br-m
<vtnerd> I thought of this, thus the attempt to do white noise, but its certainly difficult to patch ontop of an existing p2p thing > <@syntheticbird> This is the type of attack you would never thinkg about because of how cumbersome it sounds yet it works
-
br-m
<vtnerd> its impressive they indeed were able to do watermarking, as I just looked at wireshark and determined it was plausible
-
br-m
<vtnerd> it may be impossible to stop, because the remote side can always send data
-
br-m
<earthman:unredacted.org> Do we track onion nodes? > <@syntheticbird> I join you @rucknium:monero.social, The bias selection is the most serious issue in my opinion and I would go as far as saying this bother me that they can so easily distribute 5000 new onion addresses to a node and it not asking any questions.
-
br-m
<rucknium> @vtnerd:monero.social: I think I agree with you that the watermarking would only be useful combined with Tor guard node compromise and discovering the onion address of the target node. > <@vtnerd> they do this to get the last peer (which has been patched), how is this still effective? you’d need a passive+active adversary to use timed sync messages … ?
-
br-m
<earthman:unredacted.org> Is there a list of all onion nodes?
-
br-m
<rucknium> @earthman:unredacted.org: I don't know of anyone actively probing the number of onion nodes. I mean, anyone on the MRL-friendly side of things.
-
br-m
<syntheticbird> @syntheticbird: I think that over Tor white noise needs to be extended to every message and enforce penalty on not respecting a give frequency.
-
DataHoarder
monero.fail lists some onion ones
-
br-m
<earthman:unredacted.org> Aren't there already 5000 malicious ones? Who is tracking > <@syntheticbird> I join you @rucknium:monero.social, The bias selection is the most serious issue in my opinion and I would go as far as saying this bother me that they can so easily distribute 5000 new onion addresses to a node and it not asking any questions.
-
br-m
<syntheticbird> It make no sense that you can send a TSR every 20 sec
-
br-m
<rucknium> monero.fail and similar services have lists of the RPC onion addresses of Monero nodes, but that is different from the tx-relay addresses
-
br-m
<boog900> @syntheticbird: please no 😭
-
DataHoarder
specially ones with RPC
-
br-m
<vtnerd> @syntheticbird: yes, likely this, otherwise we should just give up and try nym or something
-
br-m
<rucknium> AFAIK
-
br-m
<syntheticbird> @boog900: "if someone's oppose to this wedding now is time to speak"
-
tevador
I don't think we should focus on attacks that require a compromised guard.
-
br-m
<boog900> I just don't want to add that logic to Cuprate and would question if it would even work with how dynamic our message sizes are
-
br-m
<syntheticbird> If we send periodicly fixed size messages at a given frequency even tho we don't send any message at all we break watermarking and don't need dandelion because no one will be able to do a timing correlation attack. It does however expose monero usage pattern to any relay observer
-
br-m
<syntheticbird> tevador, 2 years ago Tor project reported that 30% of its nodes were own by a single entity.
-
br-m
<syntheticbird> We need to accept the reality that Tor is not the holy grail
-
DataHoarder[m]
@syntheticbird: what is this frequency? if it's a local clock started when node started, this can be used as a fingerprint source
-
br-m
<monerobull:matrix.org> @monerobull:matrix.org: Any ideas?
-
tevador
I'm not saying it's not a problem.
-
br-m
<syntheticbird> DataHoarder[m]: that would be random and negotiated at handshake
-
br-m
<jpk68:matrix.org> @monerobull:matrix.org: I mean, you could also try and use I2P
-
DataHoarder[m]
@syntheticbird: an active prober with ISP viewpoint would be able to abuse this, specially if random
-
DataHoarder[m]
it'd be able to randomize to an interval that is unique, and change it every once in a while
-
br-m
<syntheticbird> DataHoarder[m]: true, well my idea is shit
-
DataHoarder[m]
@jpk68:matrix.org: I had to disable I2P (C one) due to active RCE... maybe time to try the (ugh) java one
-
br-m
<jpk68:matrix.org> Yes, the C++ implementation's security is... not ideal
-
br-m
<syntheticbird> I still think we should instantiate penalty on TSR being sent with a delta time from average that is too high
-
br-m
<syntheticbird> * the peerlist sanity check i mentioned before
-
br-m
<syntheticbird> if your peerlist is full there is no reason someone is just giving you 250 new nodes you never heard of
-
br-m
<rucknium> Would the peerlist sanity check be very effective? An adversary could just fill your peer list slowly instead of quickly.
-
br-m
<vtnerd> it makes watermarking harder has they get one shot per connection. and it makes filling up the table take longer (but not prevent)
-
br-m
<vtnerd> or I guess they could still watermark if they are more patient
-
br-m
<syntheticbird> Yes they can adapt without a doubt. I just think this makes the time cost considerably larger and feels like common sense enough that this mitigate trivial adversarial
-
DataHoarder[m]
longer is not long enough unless it's effectively untractable
-
DataHoarder[m]
specially for daemons/servers with 24/7 uptime
-
br-m
<boog900> @syntheticbird: I have suggested this too for clear net
-
br-m
<boog900> I think it's what bitcoin does
-
br-m
<vtnerd> one thing that no one mentioned is that not setting up inbound connections likely provides better privacy
-
br-m
<boog900> it makes you slightly more vulnerable when starting up but more secure to attacks after that
-
br-m
<syntheticbird> nice i didn't know that
-
br-m
<rucknium> Nym has ports 18080, 18081, and 18089 open for Monero nodes:
forum.nym.com/t/nip-3-nym-exit-policy-update/1462
-
br-m
<syntheticbird> The issue with Nym is that the target you connect to is not anonymous
-
br-m
<syntheticbird> only outgoing connections are protected
-
br-m
<rucknium> We can continue to think about this one. I'll keep it on the agenda for next meeting.
-
br-m
-
br-m
<rucknium> @jberman:monero.social and I think we have the bug fixed where wallets forget that they spent an output and try to spend it again, causing a double-spend error on the Node side.
-
br-m
<rucknium> Over 1.2 million txs from 48 separate wallets were sent to nodes with the patches and the problem did not occur in any of them.
-
br-m
<jberman> Shooting for v2.1 by next week's meeting, with above issue (finally) solved
-
DataHoarder[m]
haven't seen any major altchains over past few weeks
-
br-m
<rucknium> DataHoarder[m]: Fewer miners, probably, Not strong evidence that alt chains are rarer.
-
br-m
<rucknium> @jberman:monero.social: What are the goals for stressnet beyond v2.1?
-
DataHoarder[m]
I agree. There is some new miners or ones with low hashrate now listed on
stressnet.p2pool.observer/pools
-
br-m
<rucknium> Do we have a specific block size goal?
-
br-m
<rucknium> I am moving things around so I can broadcast even more txs, but it will be tedious. And I'll occupy most of the MRC resources if we go a lot higher.
-
br-m
<jberman> I didn't have a specific block size goal in mind. Stability under consistent stress (which the stressnet has experienced) was the target I was shooting for. And this set of issues seemed like the most significant lingering. Obviously we can continue with fixing the most blatant issues (e.g. slow perf when the pool is huge), bu [... too long, see
mrelay.p2pool.observer/e/noaGxpsLd0NDZ3ln ]
-
DataHoarder[m]
Syncing a wallet via monero-cli has had some abysmal performance when I tried a few days ago, even after some patches @ofrnxmr:monero.social provided. It surely does more work than just what I am doing myself, but for the explorer I am currently syncing up 130 different wallets at once on stressnet, without much CPU usage on my block explorer (With a lookahead depth of +5000 accounts)
-
DataHoarder[m]
Besides the high RAM usage of cli wallet, most of the debugging pauses I did landed on hashmap growth/insert code.
-
br-m
<rucknium> DataHoarder[m]: You feel my pain :D
-
DataHoarder[m]
the good performance allowed to scan one OUTPUT per two seconds
-
DataHoarder[m]
before it was one output every few minutes...
-
DataHoarder[m]
That might be a limiting factor if @rucknium:monero.social tries to grow the spamming further :)
-
br-m
<rucknium> It shouldn't be that bad
-
br-m
<ofrnxmr> every few mins is related to changing the lookahead
-
br-m
<rucknium> That is outputs that the wallet owns or does not own?
-
DataHoarder[m]
outputs they own, it skips successuly not owned ones
-
br-m
<boog900> monerod scales awfully with more wallets
-
DataHoarder[m]
for ones it owns it uses just one core, 100% of it, doing hashmap work :)
-
DataHoarder[m]
not monerod mind you, wallet-cli
-
br-m
<jberman> Def does sound like a bug with subasdress expansion there. And plausibly other wallet sync perf stuff affecting fiatdemise in the stressnet channel can take a look at
-
br-m
<jberman> Subaddress*
-
DataHoarder[m]
that lookahead growth shouldn't add +1 whenever an output is received, we should be growing 1.5x or something to not trigger this growth so often
-
br-m
<ofrnxmr> @jberman:monero.social the patch i gave him is yours
-
br-m
<rucknium> @ofrnxmr: @ofrnxmr:monero.social: Do you know if I am affected if I reduce the lookahead compared to the default lookahead?
-
br-m
<ofrnxmr> If you change the lookahead at all, it causes issues
-
DataHoarder[m]
I increased account lookahead to try to sync one of @rucknium:monero.social's spam wallets :)
-
br-m
<rucknium> And I thought I was being more efficient
-
DataHoarder[m]
as with defaults it didn't reach enough to start catching all outputs
-
br-m
<ofrnxmr> @ofrnxmr: (i think)
-
br-m
<ofrnxmr> Been a while since i tested
-
DataHoarder[m]
either way can discuss more about that lookahead behavior/perf in stressnet channel
-
br-m
<jberman> I remember that one. That was an upstream issue ya? Potentially new wallet side changes still playing a role > <@ofrnxmr> @jberman:monero.social the patch i gave him is yours
-
DataHoarder[m]
just raising it as an issue for maxing out block sizes/spam
-
br-m
<ofrnxmr> Yeah
-
br-m
<ofrnxmr> A regression from the set subaddress-lookahead pr
-
br-m
<rucknium> Maybe I'm not affected because once I get spamming going, I don't produce more subaddresses.
-
DataHoarder[m]
@rucknium: tbh the efficient way (for your wallet) to spam would be to send everything to main address+just a few subaddress, then specifically spend outputs, not accounts. Ofc, what you are doing is now also stressing the wallet, so hey, it did accomplish that :)
-
DataHoarder[m]
@rucknium: Due to the way the spammer does it it doesn't change the lookahead directly as it generates the indices directly, but creating it anew without the spammer driving it requires increasing it. still shouldn't cause this abysmal degradation
-
br-m
<kayabanerve:matrix.org> Vendoring Rust crates sounds fine to me, in a repository or under Monero. There's support for that in cargo and I've done it before. I think aggressively pruning unused libs with patch files may really drop the LoC to just the libs we actually use. For example, we have 150k lines of Rust's bindings to libc, and I don't believe [... too long, see
mrelay.p2pool.observer/e/hZ6pxpsLNGZQRGc5 ]
-
br-m
<kayabanerve:matrix.org> This is an interruption, sorry. I got a ping like, an hour ago, and just wanted to leave the comment.
-
br-m
<ofrnxmr> simply running mnew address 1000 after changing the lookahead will show you the regression
-
br-m
<rucknium> So my own wallets aren't really affected, but I affect you who are trying to follow my wallets. If I understand right.
-
DataHoarder[m]
@rucknium: via wallet cli, correct, as it exists in fcmp++ beta branches/releases. Using other means (like my code that also includes subaddress growth) is efficient or doesn't show the same perf hit
-
DataHoarder[m]
and for context, it's a view-only wallet what I am restoring/tracking
-
br-m
<rucknium> My spamming wallets use monero-wallet-rpc, not monero-wallet-cli by the way.
-
br-m
<rucknium> I don't know if that matters at all for this issue
-
br-m
<rucknium> Anything more on this agenda item for now?
-
br-m
<jberman> Datahoarder can you create an issue for this one plz so we can keep track of it there
-
DataHoarder[m]
in seraphis fork?
-
br-m
<jberman> Yes please
-
DataHoarder[m]
👍️ > <@jberman> Yes please
-
br-m
<jberman> Ty
-
br-m
<jberman> Nothing more from me
-
br-m
<rucknium> We can end the meeting here. Thanks everyone.