7 ms·
This is only really true if leaking the creation time of the record is itself a security concern.
by tracker1 1y ago
This is only really true if leaking the creation time of the record is itself a security concern.
- kvirani 1y agoWhich I have to assume is rare, right?
- wredcoll 1y agoIt seems wildly paranoid, even for securitt researchers.
- replygirl 1y agoit's not about the individual record, it's about correlating records. if you can sequence everything in time it gets a lot easier to deanonymize data
- Macha 1y agoHowever, if your API has a (very common) createdAt field on these objects, the ability to get the creation time from the identifier is rather academic.
- inopinatus 1y agoThe concern is not limited to access of the full records. The concern extends to any incidental expression of identifiers, especially those sent via insecure side channels such as SMS or email. In most cases this forms a compliance matter rather than an open attack vector, but it nevertheless remains that one has to answer any question along the lines "did you minimise the privacy surface?" in the negative, or at least, with a caveat.
- hinkley 1y agoAnd that’s why some people are rabid about “no SELECT *”.
- tracker1 1y agoCan you provide an example of where you would legitimately have the ID for a medical record interaction, but not a date/time associated?
- tyre 1y agoEmail is not secure but sending an email with a link to "Information about your appointment" is fine. If that link goes to `/appointments/sjdhfaskfhjaksdjf`, there is no leaked data. If it goes to `/appointments/20251017lkafjdslfjalsdkjfa`, then the link itself contains PHI. Whether creation date is PHI…I could see the argument being yes, since it correlates to medical information (when someone sought treatment, which could be when symptoms present.)
- ensignavenger 1y agoEmail may not be secure, but neither are faces and phones, and yet medical professionals use those all the time.
- ensignavenger 1y agoFat fingered fax... faxes, not faces!
- lazide 1y agoNotably, this is an absurd argument. Every system I’ve dealt with right now sends the date/time/location/practitioner clear text in the email (or some variant thereof). The only thing that seems to be protected is ‘reason for appointment’, and not all systems do that. Everyone signs paperwork to authorize this when they first engage with the medical providers!
- tracker1 1y agoWhy would you have Ids of medical events without the details of those events, generally including date+time?
- ibejoeb 1y agoThere are some practical applications that are not necessarily related to security. If you are storing something like a medical record, you don't want use it as a public ID for a patient visit, because the date is subject to HIPAA.
- mulmen 1y agoBut they would have to relate that ID to patient data like their identity right? The date alone cannot be a HIPAA issue. That means every date is a HIPAA violation because people go to the doctor every day.
- ownagefool 1y agoThis is probably not really true. You wouldn't be publishing patient visits publically, the only folks that'd legitimatly see that record would be those which access to that visit, and they'd most likely need to know the time of said visit. This access should be controlled via AuthN, AuthZ and audited. You'd also generally do a lot of time-based lookups on this data; what visits do I have today, this week, and so on. You might also want an additional DateTime field for timezones and offsets, but the v7 is probably better than v4 for this usecase.
- tracker1 1y agoCan you please give me a legitimate use case where you would have the ID of a medical case without also having the Date/Time of that corresponding record?
- ibejoeb 1y agoIt's not that you can't possess the timestamp of an event. It's that you can't publish certain things that are deemed potentially identifiable. Dates are specifically cited as potential vectors for de-anonymization. For example, you can't disclose that "Bob H presented to the clinic on October 10th" because that's a lot of information that can be used to find out who Bob H is. Here's a practical example of what I'm talking about. Suppose you have an app for physicians that allows them to message each other to discuss a case. They can share relevant information for diagnostic purposes, e.g., "34y/o male from the southern Louisianna presented with a rash." They share de-identified photos and chat about ddx, treatment protocol, etc. All of that is cool. However, if the record of that visit is identified with a UUIDv7, and that ID is used as part of the URL you've exposed the time of the visit, and that would be a problem.
- oulipo2 1y agoI remember in the cracking days, where we were trying to crack ElGamal encryption or other, we noticed when some code had been written in eg Delphi (which used a weak RNG based on datetime), then when you tried to guess when the code was compiled and the key were generated, you could get a rough timerange, and if you bruteforced through that timerange as a seed to the RNG, and tried to generate the random ElGamal key from that, you would widely reduce the range of possibilities (eg bruteforce 10M ints, instead of billions or more)
- noir_lord 1y agoAn online casino got hit a similar way a long time ago, iirc someone realised the seed for a known prng was the system clock, so you could brute force every shuffle either side of the approx time stamp and compare the results to some known cards (I.e. the ones you’d been dealt) once you had a match you knew what everyone else had. Always thought that was elegant (the attach not using the time as the seed).
- hinkley 1y agoI stopped airplane maintenance software from shipping with a particularly egregious form of this for SSL session key generation. It’s hard to get a good random seed on a real time operating system. I tell you hwut.
- tracker1 1y agoDepending on access to sensor data, it's possible to use a mix of various sensors as well as the time for seed generation. Though baseline static from RF is better assuming that is possible as well. Of course, it's always possible for something to do something stupid, like weak rng.
- wongarsu 1y agoWe used to leak approximate creation time all the time back when everyone used sequential keys. If anything sequential keys are far worse: they leak the approximate number of records, make it easy to observe the rate at which new keys are created, and once you know that you can deduce the approximate creation date of any key. UUIDv4 removes all three of those vectors. UUIDv7 still removes two of three. It doesn't leak record count or the rate at which you create them, only creation time. And you still can't guess adjacent keys. It's a pretty narrow information leakage for something you routinely reveal on purpose.
- blackenedgem 1y agoUUIDv7s are much worse for creation time though imo. For sequential IDs an attacker needs to be have a lot of data to narrow the creation time. That raises the barrier of entry considerably to the point that only a committed attacker could infer the time. With UUIDv7 the creation time is always leaked without any sampling. A casual attacker could quite easily lookup the time and become motivated in probing and linking the account further
- AdieuToLogic 1y ago> For sequential IDs an attacker needs to be have a lot of data to narrow the creation time. When sequential integer ID's are externalized, an attacker does not need creation times to perform predictive attacks. All they need to do is apply deltas to known identifiers.
- hinkley 1y agoIt’s also industrial espionage on competitors or potential acquisitions.
- teddyh 1y agoOr wartime intelligence: <https://en.wikipedia.org/wiki/German_tank_problem https://en.wikipedia.org/wiki/German_tank_problem>
- 1y ago
- deleted 1y ago[deleted]
- Too 1y agoYour comment here has id 45622189 and the UI tells me in plain sight that you posted it 11h ago. Assuming the ids are sequential, these two combined tells me more about HN vs a uuid ”leaking” something that’s already expected to be public.
- rat9988 1y agoMaybe, but what's your point?
- dethos 1y agoExactly
- nitwit005 1y agoIt was a concern in the past, as people used password creation tools that were deterministic based on the current time. There was previously an article linked here about recovering access to some bitcoin by feeding all possible timestamps in a date range to the password creation tool they used, and trying all of those passwords.
- oconnor663 1y agoIt's relatively common for it to be a privacy concern. Imagine if I'm making an online payment or something, and one of the IDs involved tells you exactly when I created my bank account. That's a decent proxy for my age.
- love2read 1y ago1) I would argue that the year that you created your bank account is not a good proxy for age. 2) I would question where you think the uuid representing your age from your bak would leak to considering it’s still a bank account id 3) I would question whether you consider that the vast majority of uuids aren’t used for high stakes ids such as online banking ids
- deleted 1y ago[deleted]
- paulddraper 1y agoA bank account number (assuming that is what are talking about, not some token) is already very sensitive information. Like, legal status protected information. Knowing approximate age is a relatively small leak compared to that.
- zie 1y agobank account numbers are printed on every check you ever wrote. Most people don't write checks anymore, though online bill pay sends physical checks still sometimes. They never really were sensitive information. Bank security does not depend on your bank account being private information. Pretty much all bank security rounds to the bank having a magic undo button, so they can undo any bad transactions after it comes to light that it was a bad transaction. Sure they do some filtering on the front-end now to eliminate the need to use the magic undo button, but that's just extra icing to keep the undo button's use to a dull roar.
- AdieuToLogic 1y ago>>> Using UUIDv7 is generally discouraged for security when the primary key is exposed to end users in external-facing applications or APIs. >> So this basically defeats the entire performance improvement of UUIDv7. Because anything coming from the user will need to look up a UUIDv4, which means every new row needs to create an extra random UUIDv4 which gets inserted into a second B-tree index, which recreates the very performance problem UUIDv7 is supposedly solving. > This is only really true if leaking the creation time of the record is itself a security concern. No, as "leaking the creation time" is not a concern when API's return resources having properties representing creation/modification timestamps. Where exposing predictable identifiers creates a security risk, such as exposing UUIDv7 or serial[0] types used as database primary keys, is it enables attackers to be able to synthesize identifiers which match arbitrary resources much quicker than when random identifiers are employed. 0 - https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-SERIAL https://www.postgresql.org/docs/current/datatype-numeric.htm...
- delifue 1y agoWith proper data permission check, having predictable ID is totally fine. And UUIDv7's random part is large enough so that it's much harder to predict than auto increment id. If your security relies on attacker don't know your ID (you don't do proper data permission check), your security is flawed.
- pinkgolem 1y agoIs that not quit commen for invites/no user account shares?
- javawizard 1y agoIndeed, but one could easily argue that 128 bits of entropy aren't sufficient for a good invite token in the first place.
- pinkgolem 1y ago
- MikeNotThePope 1y agoExactly. I wrote about that a few days ago. Primary keys using UUID v7 are (potentially) an HR violation. https://mikenotthepope.com/primary-keys-using-uuid-v7-are-potentially-an-hr-violation/ https://mikenotthepope.com/primary-keys-using-uuid-v7-are-po...
- beaker52 1y agoWhich part is in violation of the age discrimination laws here, the fact that k-sortable uuids divulge the information, or the fact someone is using them to discriminate against a candidate? If it’s the latter (which, reading wikipedias summary suggests it is), then the entire premise that k-sortable uuids are a “HR violation” is bunk. The problem with arguing about timestamps leaking this kind of information is that _anything_ can leak this kind of vaguely dated information. - Seen on a website that ceased to exist after 2010? Gotchya! - Indexed by Waybackmachine? Gotchya! - Used <different uuid scheme> for records created before 2022? Gotchya! The only way to prevent divulging temporal clues about an entity is to never reveal its existence in any kind of correlatable way (which, as far as I’m prepared to think right now, seems to defeat the point of revealing it to a UI at all).
- cuu508 1y agoWhat's the scenario here? I submit my application in 2025 and get rejected. 20 years later I submit another application to the same company, using my existing 20 years old user profile, and now get rejected because somebody figures out I'm old by looking at my user id?
- MikeNotThePope 1y agoEssentially, yes. It's a narrow use case. I just thought it was interesting, so I wrote up a short summary. Not worth a deep analysis.
- gilfoy 1y agoSo you just delay getting your old ass rejected until they interact with you instead of some uuid?
- donjoe 1y agoTo me, the most important question is: how do I scale v7 in an environment of 20+ engineers? When using v7, I need some sort of audit that checks in every API contract for the usage of v7 and potential information leakage. Detecting V7 uuids in the API contract would probably require me to enforce a special key name (uuidv7 & uuid for v4) for easier audit. Engineers will get this wrong more than once - especially in a mixed team of Jr/sr. Also, the API contracts will look a bit inconsistent: some resources will get addressed by v7, others by v4. On top, by using v4 on certain resources, I'd leak the information that those resources addressed by v4 will contain sensitive information. By sticking to v4, I'd have the same identifier for all resources across the API. When needed, I can expose the creation timestamp in the response separately. Audit is much simpler since the fields state explicitly what they will contain.
- parthdesai 1y ago> By sticking to v4, I'd have the same identifier for all resources across the API. When needed, I can expose the creation timestamp in the response separately. Audit is much simpler since the fields state explicitly what they will contain Good luck if you're operating at a decent scale, and need to worry about db maintenance/throughput. Ask the DBA at your company what they would prefer.
- lazide 1y agoIf you read the prior comment, this is now an ouroborus
- sgarland 1y ago> Detecting V7 uuids in the API contract would probably require me to enforce a special key name (uuidv7 & uuid for v4) for easier audit. Unless I'm missing something, check it on receipt, and reject it if it doesn't match. `uuid.replace("-", "")[12]` or `uuid >> 76 & 0xf`. Regardless of difficulty, this comes down to priorities. Potential security concerns aside (I maintain this really does not matter nearly as much as people think for the majority of companies), it's whether or not you care about performance at scale. If your table is never going to get over a few million rows, it doesn't matter. If you're going to get into the hundreds of millions, it matters a great deal, especially if you're using them as PKs, and doubly so if you're using InnoDB.
- whalesalad 1y agoYeah if you’re relying on unguessable public IDs as your security model you’re not doing security.