If you glance at the code there's a single "key encryption key" in the whole SQLITE file (in the 'metadata' table). That key is decrypted using AES with the PBKDF2 derived secret.
Then each password is in turn encrypted using TripleDES. The "data encryption key" for each these records is in turn encrypted using the aforementioned "key encryption key".
My suspicion is that the TripleDES format must be really old, and when they migrated the crypto layer to use AES they just re-encrypted the top layer (the "key encryption key" later) to use AES. It's much faster (and safer) to just re-encrypt all the TripleDES keys with the new AES than go and mess with "all" the records in the database. It's inelegant and lazy but you effectively get "AES level" of security without having to do all the work, so to speak…
I don't know about the particular case of TripleDES+AES but I think in a general case you can't claim that A+B encryption is always at least as strong as B alone. The A part can result in e.g. first bytes of input being the same enabling a crib-type attack.
I'm not defending this choice, and I think you're right in general.
In this case, the only thing encrypted with TripleDES is the password itself, so the practicality of a crib or other known plaintext attacks is debatable in my opinion.
If you use the same (or similar) password everywhere, then you have bigger worries than Firefox use of TripleDES. Password stuffing based with leaks from poorly hashed password DB (cough facebook cough) is likely the most practical attack vector in this case.
If all your passwords are like q@qrG#Z4ARYm^qjeTEMN2Kh45v^p7L# then crib like attacks are impractical.
There are other weird/debatable choices in the Firefox encryption layer:
- Why bother with CBC? Things like AES-GCM or other authenticated* encryption mode would be nicer. Not sure it's a flaw here (google the cryptographic doom principle of Moxie Marlinspike)
- Why not wrap the encryption keys with some kind of "key wrap" mode instead. There are such things as AES-KV for instance.
- Why do the weird PBDKF2 derivation here? It's not based on a password the player enters, so there's nothing to "strengthen"? Seems oddly unnecessary (or I don't understand and there's a password somewhere).
- If there's a password then PBKDF2 is really really shit compared to scrypt or even better one the variant of argon OWASP said you should use.
> - Why do the weird PBDKF2 derivation here? It's not based on a password the player enters, so there's nothing to "strengthen"? Seems oddly unnecessary (or I don't understand and there's a password somewhere).
If you set a master password, firefox uses that master password instead as input to PBKDF2.
But honestly I’d stay away from PBDKF2 at this stage. If you look at OWASP they recommend 600k rounds. That number is getting bigger and bigger all the time (10k rounds used to be enough over a decade ago)
There are many ways in which ISO files are useful. You have native support in Linux and Windows (you can mount). You usually also have support in virtualization or emulation software like VMWare Parallels, VirtualBox, HyperV…
So I get it Etcher for someone who wants to do it on a USB stick is probably as easy if not easier than using cat or dd. I reckon I can probably create the ISO file with Etcher too. But I’ve installed countless distros and never had to download Etcher since I could always point the virtual CD to an ISO file.
Bonus point. I don’t need to learn anything about file systems and partitions and block sizes… it just works. I have no idea how these bootable medias work since I never had to make one.
Comments go out of date because of bad developers.
The same people who do the bare minimum for tests not to explode. But won’t add a new test case for the new branches they just introduced.
The same people who will mangle the code base introducing bizarre dependencies or copy paste the same piece of code rather than refactor.
People who fail to handle errors correctly. My favorite: by wrapping code in a if statement without an else. (else? Get a weird error without logs! Miles away from the call site!)
People who don’t validate inputs.
People who don’t give a monkey about adding context to errors making the thing impossible to debug in prod when they explode.
People who are too lazy or in incompetent to do their job properly and will always jump at the opportunity to save 5 minutes now but waste 5 hours of everybody else’s time later. Because of course these people can’t fix their own bugs!
And of course these are the people who make comments go out of date. I’ve seen them implement a thing literally the line below a TODO or FIXME comment and not delete the line.
Comments going out of date is a shit excuse for not writing comments as far as I’m concerned.
The fact that some people are incompetent should not drive engineering decisions. You should always assume a minimal level of competency.
> Comments going out of date is a shit excuse for not writing comments as far as I’m concerned.
I agree.
> Comments go out of date because of bad developers
I disagree.
Comments can also go out of date because
- developer is having a really shit time atm and their head is not in the game (bad looking after people management)
- developer is on a one day a week contract and doesn’t have the time in their contract to write big header comments explaining nuances (bad strategy)
- developer thought it looked obvious to them but it’s not obvious at review time (developer is being classic human)
- developer is getting pushed to deliver the thing now now now (bad workload management)
Most of those are the result of some decision made by someone who was not the developer (they’re all real cases). And they are the “non-code blockers” that good managers solve for us, so we can focus on getting good stuff done.
I’ve been where it seems like you are at. Blaming others for being bad didn’t help me. I had to lower my expectations of others, keeping my expectations for myself. Then get on about teaching willing people how they could be better. Might be making a few assumptions/projecting a bit there, but that’s my experience with “bad developers”.
Being any type of “leader” is lonely. Whether that’s an official role assigned to you or not. Or if it’s just a skill level thing. No one can quite match up to the expectations or understand what we see and why. But explaining it goes a long way with the right ones.
If you get have privileged escalation vulnerability there are worse things you can do. Just making the system unbootable by destroying the boot sector/EFI partition and overwriting system files. No more rebooting in safe mode and no more deleting a single file to fix the boot.
This would probably be classified as a terrorist attack and frankly it’s just a matter of time until we get one some day. A small dedicated team could pull it off. It’s just so happens that the people with the skills currently either opt for cyber criminality (crypto lockers and such), work for a state actor (think Stuxnet) or play defense in a cyber security firm.
I don’t know. As a shareholder it sounds like the dumbest move ever. In what universe would it make sense to have a fab so close to an appartment building and vent toxic gas. It’s a PR disaster waiting to happen. Whatever savings you make by avoiding regulation you pay back in fines and reputation damages.
What is it they saved here? Could they not fab this in a less populated area and just follow a few more regulations. We’re not talking about a company with razor thin margins. They spent outrageous amounts of money building the spaceship HQ.
I genuinely want to understand if this is stupidity or if there’s really a profit incentive that makes “fiduciary” sense.
What reputational damage? I follow tech news very closely and it’s the first I’ve heard of it. A listed corporation’s first instinct (unless it has a conscientious board) is always to try their luck and see what they get away with. You don’t make profits by doing anything other than the absolute legal minimum, and that’s only if someone enforces those rules. Listed companies have proven they cannot be trusted to self regulate, never ever
When I was a child I remember dreams occurred but they did not contain any vivid representations of anything. Just abstract images. Nothing you could classify as vivid, let alone a representation of reality in any sense.
The whole concept that you can actually “see” something that is not real and happening in the moment is non sensical to me.
Vivid dreams are just mysterious to me as the minds eye.
Not OP. I don’t recall any dreams since childhood. If I had not experienced a few myself, I would have a hard time understanding what a dream even is. And my 10 or so dreams only had abstract images. Defo not like a movie or reality where you can “see” things, people, objects. I don’t recall much about them anyway except being slightly mildly freaked out at the time for experiencing something which was not “real”.
I can hear my thoughts and even speak to myself. I don't picture myself doing that and I don't have any image in my head.
Maybe it "looks" like a comic with only speech bubbles. It's still not the right image, because there is no image, but it also doesn't feel like a total void.
reply