14:43:24 Brief reminder that there is a research meeting today at 17:00 UTC (a little over two hours from now) 14:43:59 Feel free to comment on the agenda issue in the channel topic for anything specific that should be discussed (but this is not required!) 14:44:15 Anyone is welcome to participate and share research of interest 14:45:21 I also want to remind everyone that since I'll be stepping back from research at the end of this month, there will be only one additional meeting (aside from this one) that I'll be leading 14:45:35 Someone else will have to take on that responsibility if they wish 14:54:39 Are you planning to make some kind of announcement? 14:57:18 Outside of this group? Not particularly 14:57:36 I don't see a need for any kind of fanfare 14:59:23 Workgroups are flexible for a reason; people come and go, contribute as they see fit, and so on 14:59:50 All of my work is available on GitHub as always 15:07:32 gotcha 15:08:12 Fortunately there's a much more robust research ecosystem now than when I first started contributing, and that's great to see 15:08:43 Lots of great data science, post-quantum research, increased academic work, atomic swaps, etc. 15:44:05 Oh I missed the initial announcement, is your time off indefinite? 15:47:48 I'm not totally sure what my plans are yet; but I think it's best to step away due to burnout 15:49:01 I haven't made any kind of big, reddit-style announcement, and I don't plan to 16:18:27 Ah, good luck! 16:39:23 Will you still hang out with us 16:39:48 You mean be on IRC a lot? Likely not 16:40:18 :( 16:57:55 sarang: are you going to work for someone else? 16:59:33 I'll probably do unrelated dev work to pay the bills etc. 16:59:58 you know actually on post-quantum research, the European Commission as part of their new funding programme (Horizon Europe) have a topic (and related subtopics) dedicated to the "quantum internet" 17:00:16 sounds fancy =p 17:00:24 sarang: you gonna become a CCS/HTML dev? 17:00:29 Heh 17:00:32 I'm no designer 17:00:49 Ooh quantum internet needs quantum money :) 17:01:04 Isthmus: the EC have enough money! 17:01:23 OK, let's get started with our research meeting 17:01:28 First, greetings! 17:01:29 Hi 17:01:31 Seriously though if anyone is interested in looking at the call, let me know. 17:01:36 Hello 17:01:40 * Isthmus waves 17:02:16 Horizon Europe wants consortiums built with emphasis on extra-european knowledge/partnerships. Usual budget for these things is 4-12 million. 17:02:30 hi 17:02:45 * midipoet shuts up as meeting 17:03:06 hi 17:03:45 A brief reminder that next week's meeting will be the last that I will be leading; if anyone else wishes to take over meetings at that point, feel free to do so 17:03:49 Let's move to roundtable 17:03:56 Where anyone can share research of interest with the group 17:04:00 Does anyone wish to share anything? 17:04:08 I'd like to share two big SQL projects that I've just finished 17:04:24 The first is a tx_extra parser for PostgreSQL: http://github.com/neptuneresearch/tx-extra-parse 17:04:32 The point is to parse a transaction's tx_extra data (which is all packed together into one byte string) into separate database records for each sub-field tag and data, so it can be further queried on. 17:04:40 Here are some queries we ran about tag usage and statistics, and their results: http://github.com/neptuneresearch/monero-tx-extra-statistics-report 17:05:05 We presented some of this before in a Feb 2020 MRL meeting, and some various MRL github issues. There were some questions from then that are answered in here, sorry that took me so long! 17:05:23 The biggest result to me is that there are no unknown tx_extra tags being used: no one is storing any other kind of data in Monero transactions, besides the known kinds. 17:05:59 Huh, interesting 17:06:34 Do you take this to mean that a deprecation of `tx_extra` in favor of enforcing standard fields like encrypted pID would be unlikely to break existing unknown use cases? 17:06:59 Yes, regarding current usage 17:07:17 It would still break future possibilities 17:07:25 Sure, but that's a different problem 17:07:45 The answer to UkoeHB_ 's question is very interesting 17:08:04 Also, the single transaction that contains 1000 payment IDs, lol 17:08:19 Los of interesting stuff to unpack here 17:08:24 s/os/ots 17:08:25 Isthmus meant to say: Lots of interesting stuff to unpack here 17:08:28 There are also multiple ways to write the same data, and a transaction's choice there is a fingerprint 17:08:37 Yep, that's certainly come up before 17:08:41 For instance, do you write "public key" and then "encrypted payment id", or "encrypted payment id" and then "public key" 17:08:52 Right 17:08:57 or do you even do something unique like you add "additional public keys, 0" to every transaction 17:09:19 The "best" option (for some definition of "best") is to enforce a standard ordering and set of data 17:09:27 thereby removing the option for fingerprinting 17:09:34 or at least making it more difficult :) 17:10:16 Oh and also, full deprecation would stop unencrypted PID usage. 17:10:40 Yep 17:10:44 Yep, upvote for TLV ordering 17:11:02 It's nice to have some data backing this up 17:12:33 Anything else you'd like to share on this, n3ptune? 17:12:36 Or Isthmus? 17:12:46 Not on tx_extra 17:12:48 any questions welcome 17:12:49 The other SQL project I'd like to share is: http://github.com/neptuneresearch/ring-membership-sql 17:12:55 This provides a way from within PostgreSQL to build the transaction output index, and to decode a transaction's key_offsets, which together let you list a transaction's ring members. 17:13:01 This is a building block for writing more complicated queries regarding ring members, like decoy selection analysis. 17:13:24 Cool, so similar to what the block explorer interface does? 17:13:32 Exactly 17:13:35 neat 17:14:30 Anything interesting pop up so far when looking at that? 17:14:39 Or is it still a bit early for that analysis 17:14:59 This is pretty fresh yeah, we don't have any use cases yet 17:15:18 Haha we have a ton of use cases, they just haven't been coded up yet :- p 17:15:29 This will be a fun one to mess around with 17:15:45 Oh totally 17:15:53 Since decoy selection is totally up to the client 17:15:53 Especially once I add on the layer for tracking chainlets with fungibility defects 17:17:23 This is great! 17:17:41 Any questions for n3ptune and/or Isthmus? 17:18:47 All righty 17:18:50 I have a few things to share 17:19:09 I presented Triptych to an ESORICS workshop, which went well 17:19:25 I'm giving a talk on privacy at MCCVR this weekend, and participating in a panel on Bitcoin privacy 17:20:05 To be clear, the talk will be separate? Because I only saw an announcement regarding the panel 17:20:12 I made some updates to Arcturus for a tiny efficiency bump that simplifies things a bit, as well as updated its Python proof-of-concept code to better indicate how to do efficient verification 17:20:19 Yes, the talk is separate and occurs just before the panel 17:20:34 They separately asked me to give the talk after I agreed to do the panel 17:20:51 I'm also updating some transaction statistics for general use 17:21:01 An intriguing idea came from cargodog[m] recently 17:21:16 Where will those be shared? I have been looking for TX stats :D 17:21:17 They worked up a Rust implementation of Arcturus: https://github.com/cargodog/arcturus/ 17:21:23 :wave: 17:21:25 Thanks for clarifying 17:21:30 cargodog[m]: I'll make them available after my scripts finish up 17:21:47 The scripts are in the `tracing` branch of my `skunkworks` repo 17:22:06 Great, thanks! 17:22:08 cargodog[m] had an idea to use generalized Gray codes to speed up Triptych/Arcturus/etc. operations that's intriguing 17:22:44 I've been doing more digging to determine the extent of such efficiency gains, the conditions under which they apply significantly, as well as to what extent they're affected by underlying crypto plumbing 17:22:56 cargodog[m]: you're welcome to share this work yourself, if you like! 17:23:20 I didn't know if you were around for this meeting 17:23:33 Thanks sarang: I am currently writing up a paper to formally describe the improved technique 17:23:49 Sorry, I was running a few minutes late :) 17:24:26 One thing I noticed about your one-of-many binary Gray implementation was that it performed the Gray decomposition separately from determining which coefficients to update 17:24:30 My goal is to have a paper (short but sweet), that can clearly explain the concept, not just as it applies to Arcturus, but Triptych, Lelantus, One-out-of-Many, etc 17:24:49 I am also working on the generalized version and have the Gray code stuff operating, but I want to directly integrate the coefficient changes, to avoid redundancy 17:25:31 Indeed. My OOM implementation is fairly specific. Most of my work right now is generalizing this stuff to make it more broadly applicable 17:25:37 Fortunately you can iteratively compute the `n`-Gray codes too, meaning there's a lot of room for improving how your binary method works 17:26:26 I implemented the iterative method from a paper; I can link some example code after the meeting 17:26:42 That would be great 17:26:45 What remains is simply to do the coefficient updating from it, which is not too complicated 17:27:18 I don't think there are necessarily _huge_ gains to be made doing it this way, as opposed to a non-iterated method, but this way is certainly faster 17:27:31 Since you're not computing all the codes from scratch 17:28:07 I also had commented that I had questioned your approach because of the reliance on expensive inversions, but I had totally neglected the effects of batch inversion, which both our code and yours support 17:28:08 Still, every gain is important 17:28:12 Ultimately, I hope to attract more eyes to Arcturus, and build confidence on its hardness assumption 17:28:26 Meaning you only have to do a single inversion, and then a nontrivial number of accumulator multiplications 17:28:36 I'm super excited that you implemented this cargodog[m] 17:28:38 :D 17:29:05 Hopefully I can deliver something useful :D 17:29:07 FWIW each scalar inversion is equivalent to ~200 multiplications 17:29:13 The paper has been a breeze to work with 17:29:26 and the batch inversion of `k` scalars is one 200-mult inversion and another `3k` multiplications 17:29:29 Thanks! 17:29:30 ^ Ah, I was looking for that number yesterday. Thansk! 17:29:33 I'm glad the paper was clear 17:30:04 So anyway, the use of the Gray method will incur that batch inversion cost 17:30:22 and hence I assume there's some tradeoff that's eventually dominated by the gains from the Gray method at higher anon set sizes 17:30:40 You had also pointed out that in the batch verification case where anon sets are common, the gains improve even more 17:30:43 more important than anon set size is batch size 17:30:47 but yes 17:30:48 Of course, the effectiveness there depends on how you batch 17:31:08 For something like Lelantus, they reuse a huge anon set, but have to worry about things like windowing and filling up that set 17:31:30 For an approach more similar to ours, where we care a lot about selection age, you'd have fewer common elements in the batch 17:31:49 Yeah, I am skeptical how they intend to receive many common TXs to batch 17:31:53 but the idea is similar 17:32:13 Sure, but I think it means that the Gray gains are very dependent on how you select anon sets, and therefore how you batch 17:32:33 Yes indeed 17:32:38 At any rate, provided you clear the inversion computational hurdle, you'd start to see benefits 17:32:56 Im interested to explore ring selection techniques to maximize batching 17:33:11 Yeah, it's very nontrivial 17:33:13 An obvious approach is to increase ring size :) 17:33:24 Sure, but you can't ignore selection age, which is a big heuristic 17:33:30 and that changes dynamically 17:33:42 indeed. It is a very complex problem 17:33:59 In theory, the Lelantus-style "everyone uses a big anon set" is great for computation 17:34:03 Unfortunately I need to sign off earlier than expected. I will check in later, and welcome any questions or suggestions to either of my projects :) 17:34:10 but I fear in practice it's burdensome and could lead to age heuristics 17:34:20 No problem! Thanks for joining in today 17:34:33 I hope to be present longer in the future! 17:34:42 Hop in the channel any time 17:35:15 I'll link the inversion complexity stuff for you, as well as the `n`-Gray example code, after the meeting 17:35:23 Logs are available in the channel topic 17:35:34 Just search for mentions etc. 17:35:41 or perhaps your client will show mentions too, whatever 17:35:46 I'll get the links :) 17:36:18 OK, any questions on the topics I mentioned? 17:37:50 If not, does anyone else wish to share research topics? 17:38:16 I found a figure that is a concrete example of n3ptune's framework in action 17:38:23 Go on! 17:39:03 So I picked a random fungibility defect (in this case a particular extra tag) and showed how it's used to link transactions via the chain address 17:39:04 https://usercontent.irccloud-cdn.com/file/1F4ccO3H/image.png 17:39:20 So the wallet received 3 fresh external outputs, and made 16 transactions 17:39:39 But each time, the new transaction consumed a change output with the exact same defect 17:40:14 yikes 17:40:16 So doxxing all of the transactions was trivial 17:40:39 is the tag a payment ID or something? 17:41:04 Now the cool thing is that I can automate n3ptune's framework to both 1) automatically sift through data to identify the fungibility defects, and 2) automatically identify every transaction (/chain) from that wallet 17:41:24 So we can map out the transaction tree through change addresses for ANY wallet with ANY fungibility defect 17:41:29 It's a whole new montser 17:42:27 really impressive work guys 17:42:32 +1 17:42:34 Thanks :) 17:42:43 I think it was the `n_extra_nonce` tag? 17:42:46 I guess standardizing the tx_extra format would help in this regard 17:42:49 yep 17:43:34 Standardizing tx_extra would entirely shut down this kind of analysis, if the protocol only allowed keys and an encrypted PID 17:44:07 Well, in theory 17:44:19 You can't actually enforce the encrypted pID properly at the consensus level 17:44:36 Well, true, the fungibility defects could also be things like unlock time, unusual fees, etc. 17:44:48 You could use authenticated encryption to avoid the recipient accepting such a txn if you wanted to... 17:44:58 No, I mean you can set "the pID" to be anything you want 17:45:00 all zeros 17:45:03 Is that extra valid as per the wallet parsing rules ? 17:45:04 your phone number 17:45:06 whatever 17:45:20 I think that was a valid tag 17:45:23 There was a claim before of non non standard fields used, so I'm guessing it's vlaid. 17:45:37 So it's vlaid but out of order compared to what monerod outputs ? 17:45:50 I think it was an extra nonce, in a user transaction 17:46:03 Which Monero Core wouldn't ever write? 17:46:23 a 32 byte one ? 17:46:31 It would not anymore. 17:47:04 As in, not any kind of payment id. Neither 020901 or 022100. Just an 02 with a valid size 17:47:15 Oh. OK. 17:47:44 So our monero code would not write that by itself. 17:47:45 your phone number <= Wouldn't those still be indistinguishable due to the random element? 17:47:56 ? 17:48:06 What random element? 17:48:16 The network can't verify that you encrypted a payment ID 17:48:27 Ignore me, I am conflating things 17:48:30 You could arrange it so the _recipient_ could 17:48:34 but not at the consensus level 17:48:42 The best you can do is have the recipient not spend such an output 17:48:43 ^zcash does this, for example 17:48:51 The recipient? Yes 17:49:28 Having the recipient not spend actual money they got ? Fat chance it's gonna happen. 17:49:30 that's entirely possible (but not free from a space perspective) 17:50:18 We could add a warning though 17:50:18 Isthmus: FWIW that's all on the client 17:50:22 If such an output would be received 17:50:24 You could write a Zcash client that spends it anyway 17:50:29 Network can't tell 17:50:38 Yep 17:51:22 dEBRUYNE: we'd have to do an AEAD method and change the way that encryption happens 17:51:46 We'd probably end up including all recipient-encrypted data in that, which is much cleaner from a protocol perspective 17:51:58 and share a single AEAD tag 17:52:56 Anyway 17:53:02 We're coming to the end of the hour 17:53:13 Were there any other points relating to this that ought to be discussed now? 17:53:57 gg 17:54:25 If anything, I think this provides further evidence that enforcing standard TLV fields in `tx_extra` would be very useful 17:54:42 and the data indicate that there are no obvious existing use cases for nonstandard fields that would be disrupted 17:55:37 OK, any other research topics to share before the time is up? 17:57:06 If not, we can adjourn! 17:57:10 Thanks to everyone for attending 17:57:53 missed this but just read through it all :) 17:58:34 cargodog[m]: thanks for sharing your work on this :) 17:59:58 cargodog[m]: here's the batch inversion your library uses https://github.com/dalek-cryptography/curve25519-dalek/blob/master/src/scalar.rs#L723 18:00:16 You can find the individual scalar inversion from that function, and from there see exactly how the additional ladder works 18:01:16 https://www.irccloud.com/pastebin/B3jfb60h/gray-example 18:01:28 And here's an example of iterated `n`-Gray codes 18:01:39 (the value on line 9 is hard-coded for convenience) 18:01:57 s/additional/addition 18:01:57 sarang meant to say: You can find the individual scalar inversion from that function, and from there see exactly how the addition ladder works 18:02:06 good bot