-
ofrnxmr[m]1
<ooo123ooo1234567> "checkpoint is a compromise..." <- This
-
ooo123ooo1234567
openssl/openssl #18659, "I don't think operations after the cleanup are intended to continue working." indeed, why not to just stop using openssl and switch to something else
-
ooo123ooo1234567
too simple reproduction - don't call it in that order / certainly not our fault, too complex reproduction - it must be problem in pthread / boost / monero; facepalm
-
ooo123ooo1234567
it must crash with two duplicate OPENSSL_cleanup calls to
-
ooo123ooo1234567
selsta, can you test ?
-
ooo123ooo1234567
s/OPENSSL_cleanup/OPENSSL\_cleanup/, s/to/too/
-
selsta
yes
-
ooo123ooo1234567
`Reviewed-by: Paul Dale <pauli⊙oo>` hmm, they are supposed to know their code better than others
-
kayabanerve[m]
<jeffro256[m]> "Can you expand on what the..." <- > is the sorted set of unique factors present in each input. For miner transactions, this would be the height, in its VarInt encoding. For non-miner transactions, this would be their key images.
-
selsta
it does not crash with just OPENSSL_cleanup twice
-
selsta
and init first
-
ooo123ooo1234567
can you run once again with gdb and print stack trace ?
-
ooo123ooo1234567
nvm, not needed
-
gingeropolous
selsta, got a stall on your branch that im usin
-
ooo123ooo1234567
<selsta> "it does not crash with just..." <-
github.com/openssl/openssl/blob/openssl-3.0/crypto/init.c#L360, in theory, it should crash with concurrent execution of OPENSSL_cleanup due to usage of `static int stopped = 0`
-
selsta
gingeropolous: is it still open?
-
gingeropolous
yeah i just got a thread apply all logfile dump
-
gingeropolous
tryin to think where to... ah yeah the termbin thing there we go
-
gingeropolous
selsta,
termbin.com/g2b8 ... lemme know what else might be good. ima dig through the actual log see if anything
-
selsta
ooo123ooo1234567: does ^ seem related to your connection / p2p patch?
-
gingeropolous
nothing interesting in logs
-
gingeropolous
can i restart the daemon? or is there any thread diving needed
-
gingeropolous
or whatever its called
-
gingeropolous
thread pulling
-
ooo123ooo1234567
not so fast
-
gingeropolous
but im missin all those sweet blocks
-
ooo123ooo1234567
is it debug or release build ?
-
gingeropolous
oh prolly release
-
gingeropolous
yeah, release.
-
ooo123ooo1234567
press continue for few seconds, then interrupt it and paste another stack trace
-
ooo123ooo1234567
it's interesting whether it's completely stuck in all threads or not
-
gingeropolous
well, the current state is that the daemon is no longer spitting out any logs
-
gingeropolous
and I can't get a response from the status command
-
selsta
you have to enter: continue
-
selsta
then wait a couple seconds
-
selsta
ctrl+c
-
selsta
and then again thread apply all bt
-
selsta
doesn't matter if it appears stuck or not
-
ooo123ooo1234567
looks like a deadlock within logger
-
gingeropolous
-
gingeropolous
that includes the first dump as well
-
selsta
gingeropolous: which log level are you running these days?
-
gingeropolous
the monerod.conf says its log level 1
-
gingeropolous
its me, u know, it could be something stupid like file descriptors or whatever
-
gingeropolous
though i thought i already tweaked this box and ive got that mdbstat running every 2 mins
-
ooo123ooo1234567
wait, don't just drop that gdb session so early
-
gingeropolous
yeah ima fire up a second node. i'll keep this dead one up
-
ooo123ooo1234567
the same stack trace, so completely stuck
-
gingeropolous
so....
-
ooo123ooo1234567
I'm reading code and that stack trace currently, searching for an explanation
-
gingeropolous
roight roight roight
-
gingeropolous
sonofabitch. my new node got stuck on Height: 2653718
-
ooo123ooo1234567
the same way ?
-
gingeropolous
naw, it thought it was syncd. rpc responded
-
ooo123ooo1234567
false negative ?
-
gingeropolous
dunno what u mean. i tried copying over the data.mdb to the new node, that could be mucking it up. dunno what the head of the chain looked like. can't get blockchain import to pop blocks
-
gingeropolous
oh there it goes
-
gingeropolous
also on the new node im just running master, not selsta's branch
-
ooo123ooo1234567
if master will stuck too then it's unrelated to patches on top of it
-
selsta
gingeropolous: did it deadlock, or was it just on the wrong height for a bit? and does it work now?
-
gingeropolous
just wrong height. its working now.
-
ooo123ooo1234567
<selsta> "ooo123ooo1234567: does ^ seem..." <- indeed, obvious relation: deadlock -> deadlock with pthread mutex -> connection / p2p patch
-
ooo123ooo1234567
s/deadlock/some/, s/with//
-
ooo123ooo1234567
* indeed, according to the following deduction chain: deadlock -> some pthread mutex -> connection / p2p patch
-
ooo123ooo1234567
gingeropolous: did you run this branch
github.com/selsta/monero/blob/master-beta without any modifications ?
-
gingeropolous
ooo123ooo1234567, correct
-
selsta
when did you compile?
-
gingeropolous
looks like i made the selsta_monero folder on may 11
-
gingeropolous
yeah, bin was made then as well
-
gingeropolous
on the new box im getting 30+ connections from single IPs
-
ooo123ooo1234567
what would be the next action if this problem is reproducible with maste rtoo ?
-
ooo123ooo1234567
s/maste/master/, s/rtoo/too/
-
gingeropolous
i gotta sleep. the dead one is still in gdb. the new one is being stupid
-
ooo123ooo1234567
who will fix broken code ?
-
gingeropolous
i dunno. i just break stuff
-
ooo123ooo1234567
list of recently broken things ? 1. deadlock in monerod, 2. ... ?
-
ooo123ooo1234567
openssl/openssl #18659, "I don't think operations after the cleanup are intended to continue working." it's interesting whether it's a form of laziness or intentional dodging of problems in openssl
-
ooo123ooo1234567
their review process is an example when even labels / github bots / dedicated maintainer / etc together can't help
-
ooo123ooo1234567
<selsta> "when did you compile?" <- it doesn't matter
-
ooo123ooo1234567
<gingeropolous> "can i restart the daemon? or..." <- as you wish
-
ooo123ooo1234567
<selsta> "ooo123ooo1234567: does ^ seem..." <- it's reproducible without patches on top of master
-
spirobel[m]
why do we sometimes supply an additional public_spend_key to check_tx_proof?
github.com/monero-project/monero/bl…253a5/src/wallet/wallet2.cpp#L11817
-
spirobel[m]
I also saw that the proof is different for subaddresses and the legacy standard addresses:
monero-project/monero #2487 but that is unrelated, correct?
-
moneromooo
Outputs to subadresses are made with those keys, rather than the "main" tx key.
-
moneromooo
Or rather, with the corresponding secret key.
-
spirobel[m]
okay why do we need the public spend key in addition to the public view key to verify the proof? why sometimes the public view key is sufficient and the public spend key is not needed? ``` crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, address.m_spend_public_key, shared_secret[0], sig[0], version) :
-
spirobel[m]
crypto::check_tx_proof(prefix_hash, address.m_view_public_key, tx_pub_key, boost::none, shared_secret[0], sig[0], version); ```
-
spirobel[m]
-
spirobel[m]
what I also dont understand: what is this: get_additional_tx_pub_keys_from_extra function?
github.com/monero-project/monero/bl…253a5/src/wallet/wallet2.cpp#L11790 does it mean somtimes public keys (what is meant by public keys in this context?) are being put in tx_extra? I assume this is some kind of legacy thing, true?
-
moneromooo
They are always in extra.
-
moneromooo
Public keys are sometimes known as R in shorthand. At least prior to subaddresses, not sure if the convention changed for those.
-
spirobel[m]
moneromooo: how do they relate to public view keys and public spend keys and stealth addresses?
-
moneromooo
Zero to monero should have that.
-
spirobel[m]
<moneromooo> "Zero to monero should have that." <- I read chapter 8.1.3 ... it does not say anything about view and spend keys ... Is there another chapter that I could take a look at?
-
ooo123ooo1234567
can you read C++ ?
-
ooo123ooo1234567
openssl/openssl #17995#issuecomment-1125862196, "the bottom line is that the cleanup flow is broken in OpenSSL 3.0. This would impact multiple users. Shouldn’t there be an urgency to fix this issue ?" hahahahaha
-
ooo123ooo1234567
openssl/openssl #18024#issuecomment-1106034011, "This issue is critical for our release. can you please help to provide an update?" it looks like they don't know how implement cleanup of resources properly
-
wernervasquez[m]
spirobel: tx_pub_keys are the shared secret for that tx.
-
moneromooo
Technically aren't since they're public.
-
moneromooo
They're used to derive the shared secret though.
-
spirobel[m]
<wernervasquez[m]> "spirobel: tx_pub_keys are the..." <- are shared secrets and encrypted payment_ids the same?
-
kayabanerve[m]
spirobel: Not at all.
-
wernervasquez[m]
moneromooo: Yes. I misspoke. The tx pub keys are used to derive the shared secret.
-
wernervasquez[m]
spirobel: see
cryptobook.nakov.com/asymmetric-key-ciphers/ecdh-key-exchange for a textbook example of what a shared secret is
-
wernervasquez[m]
With regards to a monero transaction, "Alice" would be the person recieving funds and her pubkey is the xmr address and her private key is tge private key for her xmr address. "Bob" is the sender and his pubkey is the tx pubkey and his private key (should be) randomly generated for that transaction.
-
wernervasquez[m]
That is a sliiiiight simplification since xmr has both view keys and spenk keys and subaddresses, but that is the gist of it
-
spirobel[m]
are payment_ids verified when doing check_tx_proof on a transaction that was sent to an integrated address?
-
spirobel[m]
<wernervasquez[m]> "With regards to a monero..." <- so tx_public keys are the public part of the TX_KEY that we use to generate the proof for the transaction? but what are additional public_keys? the name sounds like they are something extraordinary ... does every transaction have those?
-
wernervasquez[m]
spirobel: I believe that is from page 40 of ZTM2. With subaddresses, the tx pubkey is specific to the reciever instead of being able to be reused across all recievers in the tx
-
wernervasquez[m]
So, the "additional" pubkeys are just to support subaddresses since they each need their own pubkey (rK instead of rG in ZTM2)....
-
spirobel[m]
wernervasquez[m]: in case the transaction has multiple destination addresses?
-
wernervasquez[m]
As far as I understand. But please dont take this as gospel and please double check this. I do not have the focus right now to be thorough.
-
spirobel[m]
wernervasquez[m]: so that is why we need the public spend key to check a transaction that was made to a subaddress, correct? that was the question i started out with ... why do we need the public spend key to prove these kind of transactions where the destination is a subaddress, but in the case of a legacy standard address it is unneeded?
-
spirobel[m]
so transactions with a legacy standard address as the destination are non uniform from transactions made to subaddresses? or are these differences only visible to sender and receiver?
-
wernervasquez[m]
I apologize that I do not
-
wernervasquez[m]
Have time to answer this now.
-
wernervasquez[m]
However, I will leave on this note. For both standard and subaddresses, in order to recognize an output as yours, you need the public spend key.
-
wernervasquez[m]
See page 38 and page 40. Step 3 on both pages
-
spirobel[m]
thanks! I appreciate it! 🙂👍️
-
UkoeHB
spirobel[m]: page 40 footnote 16
-
spirobel[m]
<UkoeHB> "spirobel: page 40 footnote 16" <- okay I have to dig into this further, but just judging from this footnote, transactions to subaddresses seem to be non uniform with transactions to the legacy standard addresses. Maybe we should address this problem by changing the wallet UX: no primary addresses should be displayed anymore, only subadddresses. this way we could increase transaction uniformity and decrease confusion.
-
spirobel[m]
another question is this: How do I verify that a transaction was made with a certain payment_id without the receiver view_key, just from the tx_proof? First of all: is the assumption correct, that check_tx_proof does not already make sure the payment_id is right if we feed it an integrated address?
-
moneromooo
If you did not keep the payment id when you sent the tx, you cannot re-derive it from the tx. Only the recipient can.
-
spirobel[m]
but if I have the payment_id, can I recreate the encrypted_payment_id and compare the outputs? is
github.com/monero-project/monero/bl…/src/device/device_default.cpp#L352 deterministic ?
-
moneromooo
It appears to be deterministic at first glance.
-
UkoeHB
spirobel[m]: it should be possible by adapting the InProof or OutProof
-
spirobel[m]
okay so it seems i really need to understand this code in detail. When I have a normal transaction with just one subaddress as the destination address, is it enought to call get_tx_pub_key_from_extra or will there be additional keys and I need to call get_additional_tx_pub_keys_from_extra?
-
stretch1
does lmdb include a pid or finger print?
-
stretch1
s/pid/identifier/
-
UkoeHB
spirobel[m]: why not always call both? then you don't have to worry about the different scenarios
-
moneromooo
stretch1: rephrase
-
moneromooo
If you mean "does the blockchain db used in monero have a unique string that identifies it from all other monero blockchain dbs", then no.
-
moneromooo
However, its internal structure might be unique, ie the exact set of ops that were done on it might have left free pages in a particular order.
-
moneromooo
Free pages might or might not be cleared, so that would also give you extra fingerprintability if so (ie, what data was there before it got freed).
-
moneromooo
You'd have to check the source to see whether they're cleared. I'm guesing not, for performance.
-
moneromooo
Then again, the only thing you can get from that is "are those two files from the same person", and possibly was this no involved in a recent reorg, maybe.
-
moneromooo
If you meant something else, explain what.
-
stretch1
thank you
-
stretch1
i ask explicit: no
-
stretch1
implicit: yes (due unique chain of ops)
-
spirobel[m]
<UkoeHB> "spirobel: why not always call..." <- that makes sense. I just want to make sure I understand this completely, because it affects transaction uniformity and that is an important topic that I should know in detail. 🙂
-
stretch1
please handle SIGINT when cli in locked state
-
stretch1
rlly kill -9 ...
-
sethforprivacy
So, what does the `--no-dns` flag do for the wallet, and why are there DNS requests necessary at all for spending?
-
sethforprivacy
DoH/VPN DNS seems to be at the root of spending UX issues I and others are facing (not output distribution caching, though that could help as well), but I don't really understand why DNS queries are necessary at all when spending Monero.
-
moneromooo
IIRC, obsolete check for "was there an asshole reusing the chain for fork, which would cause people to spend the same output twice with different rings".
-
moneromooo
I forget the specifics, but the fake out selection would weigh differently pre/post fork height.
-
moneromooo
I'm not sure it even works anymore. It was iffy.
-
moneromooo
I don't *think* anything else uses DNS in the wallet.
-
sethforprivacy
-
ooo123ooo1234567
In general, it could be any other centralized dns record. Is it obvious now why dns was so slow ?
-
tobtoht[m]
OpenAlias resolve uses DNS. (And I believe there is some (unused?) stuff in checkpoints.cpp that that can load checkpoints from DNS.)
-
sethforprivacy
ALl of this happens at transaction generation, which means you're absolutely fucked if your DNS server cares about Monero -- these are 100% attributable to Monero usage and contacting these domains with every send is a dead giveaway and simple source of timing analysis.
-
moneromooo
Oh yes, I'd forgot openalias, thanks.
-
sethforprivacy
The biggest thing to know is -- is this a default behavior of wallet2 etc. (and thus a core function of most wallets) or is this limited to select wallets?
-
ooo123ooo1234567
it's default of wallet2
-
sethforprivacy
None of these DNS servers or domains should be called if you're not actually sending to an OpenAlias address.
-
sethforprivacy
The only default DNS usage should be resolving domain name of a given remote node or resolving an OpenAlias (if actually used)
-
sethforprivacy
* remote node (if DNS is used for the node address) or resolving
-
sethforprivacy
Calling all of these servers and moneropulse.* domains each transaction generation is... very, very bad.
-
sethforprivacy
And it's the source of UX pain for users who have strict DNS handling, use DoH, or use some sort of DNS catch/redirect/block for privacy/security reasons.
-
sethforprivacy
Thats why only some people (like myself) have noticed the UX issues.
-
moneromooo
Well, change it ?
-
sethforprivacy
I don't know C++ sadly
-
tobtoht[m]
I agree with Seth here. Do we need to keep the segregation height over DNS stuff around? There is code in place to allow it to be configured manually for those that want to.
-
moneromooo
Ah, then file a bug.
-
sethforprivacy
tobtoht[m]: A manual flag for those who want it for some reason is fine, but default behavior these days doesn't make sense.
-
sethforprivacy
Yeah I wanted to confirm my suspicion before I did
-
sethforprivacy
I'll raise an issue now.
-
tobtoht[m]
Working on a PR.
-
sethforprivacy
-
sethforprivacy
Threw it together but it's a starting point
-
sethforprivacy
tobtoht[m]: Thanks!
-
sethforprivacy
Honestly I'm much more worried about the network privacy implications of this than my pesky UX issues anymore
-
sethforprivacy
I had no idea this was default behavior...
-
sgp_[m]
I also had no idea the same servers were pinged before sending a transaction
-
sethforprivacy
-
sethforprivacy
Thanks, tobtoht!
-
tobtoht[m]
No problem :)
-
MajesticBank
hit new circuit
-
arnuschky[m]
-
dukenukem
\o/
-
UkoeHB
thanks arnuschky[m]
-
arnuschky[m]
The report went through a few rounds of review and clarifications; as well as a review of the devs before publication. Hence the delay.
-
arnuschky[m]
(I figured it's best to run this report by the devs first to make sure there's nothing critical in there, as I wasn't comfortable to make that call myself)
-
arnuschky[m]
A big thank you to everyone that helped, first and foremost to Koe who explained and commented throughout the whole process.
-
ooo123ooo1234567
<arnuschky[m]> "Hello everyone, the audit of PR..." <- What would be the next action in case if there are issues not mentioned in this report ?
-
arnuschky
I guess to bring them to the attention of the community, ideally following the responsible disclosure process or HackerOne
-
arnuschky
I am not the most qualified to say. However the route you have taken last time seems sensible.
-
arnuschky
If the issues are minor and don't need to be disclosed privately, maybe the simplest solution is to discuss them here
-
ooo123ooo1234567
How would you describe the aim for that audit ? Was it achieved ?
-
arnuschky
The aim was to make sure that the three reported issues were indeed fixed. This was achieved.
-
arnuschky
(as described in the Scope section of the report)
-
arnuschky
It's pretty hard to set a target scope for such a limited audit. The best option would probably be to audit/analyse the whole multisig system, as previously discussed.
-
arnuschky
@ooo123ooo1234567 you've said in the past that you have done that, so it doesn't surprise me that you have found further issues.
-
ooo123ooo1234567
<ooo123ooo1234567> "if you all stopped pretending..." <- this
-
ooo123ooo1234567
<arnuschky> "I guess to bring them to the..." <-
nitter.42l.fr/kayabaNerve/status/1539991529795866627#m, indeed, a good way
-
kayabanerve[m]
While I had a few comments, it seemed competent overall. While I don't mean without a few fixes merged, I would like to see 8149 merged using the experimental label.
-
kayabanerve[m]
The discussion against isn't about issues with 8149. It's issues with the review process. While I'm not against such issues, I believe there's a lack of explicit steps to continue the review process posited for sufficiency, which makes us unavailable to actually continue with anything if we fall under that line of thinking.
-
kayabanerve[m]
And I do mean 8149 + minor fixes, which will require new review, + the burning bug fix.
-
kayabanerve[m]
If ooo123ooo1234567: has either specific issues with the audit OR has explicit steps they'd like to see before it's merged, I'd appreciate their input though :)