Government launches login.gov to simplify access to public services
18f.gsa.gov
18f.gsa.gov
This might be convenient, but might also mark the beginning of a major new point of U.S. government control over the Internet, with all the surveillance and other civil liberties issues that this might raise, to say nothing of the issues that could arise from this degree of centralization.
Now seems like the time to set the expectation that this service may not ever be used by private websites. Of course, we tried that with Social Security numbers too, for all the good it did us. http://www.nytimes.com/1998/07/26/weekinreview/the-nation-no...
This is why I don't use "log in with google" or log in with Facebook" -- I don't think those companies are evil (I use them both) but I can't afford for them to accidentally or absentmindedly deny me access to other services.
So account closure seems like a positive point of government-controlled login.
I agree that the government should be a far more dependable provider than any private sector organization. But the recent (last 20 years) enthusiasm for scope creep has not been encouraging.
I'm not saying the government wouldn't do it. I'm saying you would have constitutional basis to sue, which you don't have for companies.
Some lawsuits against the no fly list have been successful. https://www.aclu.org/blog/national-security/victory-no-fly-l...
Edit: Forgot this post was a couple days old, working through my HN backlog haha
You can't sue FB for account termination
Ten years? Yeah, that'll help. I pretty much admitted to everything I'd ever done, on those forms. It wasn't just me impacted, it had names of my friends and family. Then, I'm guessing it had all the notes I didn't see, from things like the interviews.
I don't have any real enemies, or any reason to be afraid, but that makes me no less angry and feel no less violated. Meh... I try to let the anger go, so it only pops up when I discuss it. There's nothing I can do to change it. I do consider it the greatest violation of trust ever enacted on me by the government. There was no reason for me to even be in the system any more, I am retired.
[redacted]
Oh well... If you can get away with it, freeze your credit. This does, curiously, impact your credit score. The peace of mind is worth it. Sorry for the novella.
I'm certainly entertaining conspiracy theory level ludicrousy, but it is entertaining.
For example, in Norway you can see everyone's tax returns [0]. The caveat is that if you see someone else's tax return - the person will be notified. Now, if you just make tax returns public without the notification - it would be a different policy and not comparable to Norway. Therefore, comparisons/mentions should be complete and apt.
[0] https://www.theguardian.com/money/blog/2016/apr/11/when-it-c...
Belgium has eID.
I think it's a noble pursuit (what the US Digital Service is trying to do here[1]), making the internet easier and more accessible for people. For many people, involving themselves in the constant updates of what service is secure versus what service is not and "I have to sign up for a different email now to log in to the thing I used to log in to" is a nightmare -- and this isn't restricted to the elderly.
I think it's noble, because I really think it shouldn't be arcane. To a lot of people the nuances still are, unfortunately.
But a service that translates blockchain addresses into WWW accounts and back has some value, no? Couldn't it do a better job of this? I'd love to know if anybody has any more insight or thoughts. I haven't dug too deeply yet, but it keeps coming back to me. Perhaps BlockOne ID isn't the ultimate execution, but maybe one could be developed. Something that requires one sign up, and can be used as ubiquitously as you like.
---
[0] https://blockoneid.thomsonreuters.com/
[1] For instance, with Canadian Government services I require an account for every single service, often with different password and username requirements and age limits. I understand why, but for somebody who doesn't spend so much of their career(s) on and around and familiar with computers and how they work, it could be prohibitive.
Wha-huh? Why? What specifically is wrong with login.gov (or any government agency) running an oauth server and private websites allowing users to authenticate with it? How does that result in "a major new point of U.S. government control over the Internet"?
Oh shit! The government knows I bought something from custom-fishing-lures.com! Ruuuuun!
Seriously, what you just listed is a reason not to use the government's Oauth for every website and ban all other implementations. What OP seemed to say, and what I disputed, is the idea that this service should not ever be used by any private website even as one of several options.
The US does not have legally-mandated job-protected leave for pre-trial detention, people have been terminated (for cause, and so not eligible for unemployment, either) for missing one day of work due to an arrest for which no charges were ever filed.
BTW in case anyone thinks it was a ridiculously contrived example, I was just trying to illustrate that what one person thinks is totally innocuous can appear damning to someone else.
The state exists as the means for ensuring positive societal outcomes, such as providing services that the private competitive market cannot or will not supply (tragedy of the commons, game theory, etc). One such possible service is an identity service - and we already have that through a hodge-podge of things like SSN, driving licenses, passports, etc. A consolidation of these services means greater efficiency, less waste, and therefore lower taxes.
I'd respect the libertarian position more if it were framed as "greater utility of government" instead of the dogmatic "less government".
This is the moral basis for outcomes like, snuffing out a person for selling loose cigarettes. In the end, the privileged get away with infractions that hurt people en masse, and the disposessed get punished for offending the sensibilities of those who get to define "positivity" on behalf of society.
I'd respect the state position more if there were well defined metrics for "greater utility" and a stronger non self regulating mechanism for accountability, instead of the dogmatic principle that voting constitutes consent.
That's a far greater threat than that they might shut off any given person's access.
Step 1) regulate all speech by vaguely defined hate speech laws, which change based on who has power
Step 2) Start arbitrarily destroying sites based on who is in power, utilizing login.gov + speech controls, to deem a given site in violation of speech codes
Or, more plausibly, selectively refuses to authenticate you to certain classes of sites, whether “all non-government sites” or something more targeted.
The government does shady stuff all the time. It's unwise to give them such an easy kill-switch that cuts off any particular citizen's access at any time.
The government is made up of people, and given enough people, at least one is bound to do something stupid for reasons most won't understand. If someone can do something, no matter how ridiculous, at some point, someone will.
Sites will use such a service to invade your privacy even further, and the government has a record of every site you've logged into and when.
That's not how OAuth works. https://en.wikipedia.org/wiki/OAuth
> the government has a record of every site you've logged into
Only the ones where you chose to use their service. Or are we imaginging a future where this service has been made mandatory, and logins and passwords have been abolished?
Honestly, the amount of FUD in this thread is absurd. The government already has an enormous amount of information about your online activity! If they want more, their strategy will probably not be writing open source software and hoping you opt in to it!
> Only the ones where you chose to use their service.
There are hundreds of websites that require you to use Facebook to log in. With government-sanctioned ID, it will be worse.
> Or are we imaginging a future where this service has been made mandatory, and logins and passwords have been abolished?
This already exists in several countries, including Korea. https://en.m.wikipedia.org/wiki/Resident_registration_number
Hopefully this serves as an indicator that your skepticism on this topic is wildly miscalibrated. There's no "imagination" involved, this is how it is right now in places where this exists.
> their strategy will probably not be writing open source software and hoping you opt in to it!
That is the exact strategy I would use if my goal was to help the government gain more control over the internet. Letting people give their freedom away in exchange for a bit of convenience is one of the oldest tricks in the book.
The reason I'm not worried about the government finding out which websites I visit is because they already know, from traffic inspection at the ISP level. Don't think I'm the one miscalibrated here.
Beyond that, the problem with this "but they might do something bad!" argument is not that it's false, it's that it's always true in every case. Literally every government policy could be the precursor to something terrible. Sure, they could introduce an optional OAuth to try to stop identity theft and then later use it to censor the internet, but they could also just censor the internet straightaway.
Yes, this is true. If all websites start requiring their visitors to do something their visitors overwhelmingly don't want, the result would be something their visitors don't want. Kind of suggests that they won't do that, yes?
We will probably have to agree to disagree here; you're imagining a world where oauth.fed.gov slowly becomes more and more widespread until it's ubiquitous and we have no other options, and that just doesn't sound realistic to me. (I think it would struggle for adoption even if it were implemented perfectly and had the best privacy controls possible, due to exactly the fears you're enumerating in this discussion) But we are talking about something hypothetical, so either of us could be right.
At any rate thanks for arguing forcefully but staying respectful and on topic!
Again, please look at what's happening in South Korea. I think you're vastly underestimating how likely businesses are to adopt such a thing and how likely the government is to gradually incentivize (and eventually force) businesses into using it.
How can you tell? You are looking at a PR piece that links to a web site that mentions 'security experts' in every other sentence. It's not proven to be valuable or well executed.
First, my name is Joel Minton and I lead login.gov. All of us who came here to build this did so to drive higher Security, Privacy and Usability for all Americans. This is a core building block that we believe will benefit millions of Americans and the government agencies that serve them.
Second, the tradeoffs that we have been considering for over 18 months are very similar to those that all of you are bringing up as well. We have made a lot of progress on balancing these tradeoffs, which are primarily focused on Security, Privacy and Usability. Since we are constantly iterating to improve login.gov, we welcome any future feedback that you and others provide.
Third, for anyone who has a background in identity and/or large scale platforms and is interested in serving our country by helping to build this critical platform, please consider joining us. Your salary would not likely be as high as the private sector, but trust me, the amount of positive impact you would have on our country is tremendous. You can DM me either on Linked In or my lightly used twitter Account (jrminton).
Thanks again!
4 out of 5 open issues have comments from core members working with the issue opener.
Seems ok?
We're working with other agencies interested in the platform and will announce them as they go live.
*I work for 18F
Are you someone I could talk to about something like this?: https://www.cipheredtrust.com/doc/
I have sent several emails to the 18F email address without luck so far :)
The approach outlined above addresses a much larger problem, ie a way to easily and inexpensively support information verification on the internet while preserving privacy and security.
Like GitHub.
I actually contacted the Verify folks about leveraging a privacy-preserving approached as outlined here: https://www.cipheredtrust.com/doc/
I believe they were involved in some sort of porn regulation effort launched in the house of commons with a lot of privacy implication, a mechanism as described above would address all of that privacy problem.
Source: Interviewed with USDS.
For example, I'd rather NOT have to manage login credentials for my bank, mortgage car payment, and various airlines.
I'd rather let login.gov handle it.
Moreover, as a saas provider, I wouldn't mind deferring this liability to someone other than google or facebook.
I apologize if this sounds futile or like I'm donning my tinfoil hat, but my guard is way up these days.
NemID itself is ran by a private party -- the basic pricing is 50 cents per unique user or 15 cents per session if you are a non-government entity.
There are some privacy protections -- as non-government entity you cannot get to the SSN, just another ID, but you can ask the user to enter their SSN and verify it's valid for that user.
It's working pretty well after they finally got rid of the Java encryption applets. However you need to have a Danish SSN to use it, so you either live in DK or are a citizen.
Besides i'm not even american, so whatever
Plus, disliking and being wary of government is quintessentially American—it goes back to our roots as a country.
As an example that just popped into my head, look at DACA: a bunch of undocumented persons told the federal government about their undocumented status (in exchange for something good) and now that information can/will/may be used to deport them.
With the government, it cuts both ways.
Your answers were more about things the government can do to screw you over. It can do those things if your data is stored in Facebook as well: search warrants, compliance orders, subpoenas, etc. will all result in the government having access to your data unless strong encryption is used on your data (which, as we've seen with Apple, is still not enough sometimes).
I think (though I may be wrong) that the question had more to do with whether you trust this solution to be more secure against external/accidental breach than a solution offered by Facebook. I don't know the answer to that question, though.
> are you more scared about data security in an online identity provider provided by the government or Facebook et. al.?
Fair question. I'd still choose Facebook, mostly because they have an economic incentive not to screw it up. The government, on the other hand, has no such incentives. I mean, I trust both about as far as I can throw them, but at least one stays in business by practicing good security.
Passwords appear to be stored in the users table in the "encrypted_password" column, and it does not appear that any database-based security is used. This is one RCE/SQLI vulnerability away from exposing the password hashes for all users. To be fair, that's probably true of most sites that store password hashes, but I would have expected better from 18F.
If you want an example for a Ruby authentication library that does this, there is Rodauth: https://github.com/jeremyevans/rodauth
Considering that password hashes are stored in the users table, it seems unlikely. While you can use PostgreSQL to implement per-column permissions, it's a fairly large pain, and you have to make sure every query you are using that selects from the table does not select that column. Rails/ActiveRecord by default selects all columns in the model's table, and it's a fair amount of work to work around that.
It works with SQL, using language elements like VIEW, PROCEDURE, ROLE and GRANT
SQL Databases can still do it, but people who know how to use it are all retired or work in management now. :-)
Also: no web framework knows how to deal with it.
*I work for 18F
Unfortunately, I have to use AUSKEY to transact on my business tax details etc., and just the sheer UX nightmare that it is makes an already detested task even harder to swallow.
They also make you download/print a private key just in case.
From the documentation in the README: https://github.com/18F/identity-idp
disable_email_sending: ‘true’
enable_load_testing_mode: ‘true’
telephony_disabled: ‘true’
Multiple directions, multiple naming conventions, strings?!?!?. Just seems like a recipe for failure. I feel like this would be more clear: load_testing_mode: true
send_email: false
telephony: false
When you write your conditionals, it makes it so much easier to read: if !disable_email_sending
do_send_email
vs. if send_email
do_send_email
Here is the line in actual use...https://github.com/18F/identity-idp/blob/df549cf9a1fc2c21e3e...
I'd personally rather have the positive condition first as it is easier for me to follow logically in my head.
Security-wise, starts with using the phone for 2fa, allows setting up TOTP. Generates backup codes and tests for retention. Big problem though: there's no option to disable the phone as a 2fa option. A lesser sin is no U2F support.
I wonder why something like this was not a thing in the US before? I mean we are not a 3rd world country but definitly behind the US in almost every aspect. Is it something to do with the relationship between the states and the federal government?
Should they have used an EV certificate?
The code is open source, but it doesn't mean login.gov runs exactly this code.
Now imagine the NSA forks the code, adds a master password "IworkForTheNSA,LetMeIn!" and runs the fork instead on login.gov. Now the government can impersonate you in seconds.
Use Auth0 if you don't want to handle auth yourself. It's probably more difficult to coerce a private company into hacking its users, than it is for the NSA/FBI/IRS/Whatever to hack it's own system.
Don't be foolish. Don't use that for private businesses.
The only way to fix this is with something like per-user encryption of data, in which case a master password wouldn't help, although I'm not quite sure how you'd implement oauth and have an encryption password. Maybe the oauth system uses your password to decrypt a personal encryption key, and that is then sent to the client services. That way a master password doesn't get access.
This is a fantasy. I'm shocked to find people parroting this argument mere years after Snowden.
Not all information requires an identity system to manage
access. You can protect the privacy of users and reduce
the security risk to your systems by avoiding any
unnecessary collection of personally identifiable
information — this even includes contact details.Doesn't matter, the consequenes are the same. If it is compromised or exploited (internally or externally) the exploiter can access all of your information from, and impersonate you too, all the government systems that rely on it for identity.
login.gov is obviously a good idea. Can you imagine how awful government website's internal authentication software must be? This is like Auth0 for government agencies. It will probably be 10x worse than Auth0 but 10x better than the atrocities probably being committed right now.
The same way I can, say, connect to my spotify via my Google+ account, but that doesn't mean that google has all of my spotify playlists.
If you're referring to the guidelines, they also show how leaving out sentiments like these doesn't diminish the clarification you're adding:
> Please don't insinuate that someone hasn't read an article. "Did you even read the article? It mentions that" can be shortened to "The article mentions that."[0]
https://news.ycombinator.com/newsguidelines.html
Chiding someone who is trolling isn't going to accomplish anything (and likely make it worse). If they aren't, they'll (hopefully) appreciate the clarification, no chiding necessary.
Yes they do. Spotify is asking Google, "Hey, does this web browser have the ability to log in to Spotify as this fellow?" Google can say yes whenever they want, and Spotify is completely trusting the answer.
Google is supposed to only say yes when it's your browser, and not when it's a Google employee's browser, but you have absolutely no way of knowing that.
When you use a third-party site for authentication, the security properties are exactly the same as if you had generated a new random password, wrote it down, and gave it to the third party.
I'm currently in Denmark and they have this inane two-factor authentication system for all (e.g. banks and not just public) services that uses physical printed cards with 150 codes each; when you are close to using one up you need to get another one in the mail. https://en.wikipedia.org/wiki/NemID
Hopefully if this requires 2FA it can use the TOTP open standard, etc.
It's really convenient, but scary at the same time.
Many aspects of this make no sense to me... so IF this is actually what they are doing...
hash(user, password) {
salt = CS-PRNG(160bit)
s = scrypt(salt, password)
z1 = s[0:32]
z2 = s[32:64]
R = CS-PRNG(256bit)
d = HSM(R) XOR (pad_right(z1, 0x00, 32 bytes))
cek = SHA256(z2 || d)
hash = SHA256(cek)
save_record(user, d, salt, hash)
}
First and foremost, if the HSM operation is to have any meaning, it needs to be in the critical path for encrypting / decrypting data and possibly also calculating the password hash. If you don't need to go through the HSM to perform a decrypt or a hash validation, then obviously the HSM isn't actually securing anything! All it becomes is a source of entropy into the key derivation, but that's more likely to harm than help.From their own specification;
"It is important to note that the HSM factor strengthens the model in a way different than the other two factors, which rely on keeping them secret. Because the HSM is tied to a physical object, brute force attacks on our database would need to happen in proximity to the HSM, i.e., within our AWS environment, which greatly reduces the attack surface. A bad actor with a copy of the database cannot apply their own computing power to brute force cracking of passwords."
But to be clear, if you have 'd', 'salt', and 'hash', you can brute force attack passwords as;
s = scrypt(salt, password)
h = SHA256(SHA256(s[32:64] || d))
h =? hash
Now, if they were not storing 'd' in the user record, you might think to store what they call 'R' in the user record. Then you would have to go through the HSM as part of each login to derive the correct 'd' and 'cek' which is how it's supposed to work.But even that design is still not good enough. You don't want to allow an attacker to pull 'R' from your database, send it through the HSM just once, and then be able to start brute forcing the password forever from there on out. If you're going to pay for an HSM, and your going to call it for each password verification, then you better make sure an attacker is also required to call the HSM for each attempt at verifying a password. Which means you send your password hash (or something derived from it) through the HSM, not just a random 'R'!
Next, besides all of that, the design is horrific for end users. PII is encrypted with 'cek' above. That means if you lose your password, you lose your PII. Which means starting basically a new account from scratch! I can't endorse the idea that a password reset from an end user will effectively wipe out their account information and make them start over.
The vast majority of users will be logging into this service infrequently. Combine this with a typically user hostile password policy, and the result is that a large percentage of users will be resetting their password every time they need to login. With this design, that means they have to start over with validation through a third party... and guess who that third party is? Companies like Equifax now responsible for the single largest PII breach in American history.
Now they've also added something like a recovery key which the user is supposed to print out and save at the moment they create their account, and that key is used to separately encrypt all the PII. So if the user forgets their password but can find this magic piece of paper, they can enter this key (that'll be fun) as part of the password reset process and reset their password without effectively wiping their account. To think "Average Users" will succeed in doing this belies reality.
But wait... where is this magic key being saved on login.gov servers? If it was a private key they give to the user and they just keep the public key on their side that could work, but it's actually an uppercase 16 character alphanumeric token... 5.17 * 16 = 82 bits. Let's hope that's not literally the encryption key, but the alternative -- it's a token used to lookup the key in their database -- would completely defeat the purpose of encrypting the PII with a PBK in the first place?! And, even if it was the literal encryption key, when you change or update your PII, if they don't also keep it on their side, how would they update their secondary encrypted PII record?
Without having looked at the actual implementation, here's one option that could work: Upon account creation, the server generates a key pair and a random string - the recovery code. The server stores the public key and an encrypted version of the private key, with the encryption key being the recovery code. Any changes to PII can be encrypted using the public key. The server does not need to store the recovery code (which would beat the whole point of this exercise). Instead, it can simply attempt to decrypt the PII with the user-provided recovery code, and if it succeeds, the server knows the entered recovery code was valid.
It does look like they are using the recovery key as a second password, and running it through scrypt to verify it, but I haven't traced past that point yet, and Ruby is not my first, second, or 3rd language.
From what I can tell, they do the same key derivation process as with the primary password, but then also encrypt the secondary 'cek' with another key -- perhaps just HSM(R) -- so they can get back 'cek' without needing the token. But I'm not sure I'm reading it right because there are variables called things like 'encryption_key', 'encrypted_code', 'encryption_code', 'encrypted_key', 'encrypted_password', 'personal_code', 'raw_personal_code', 'code', 'hashed_code', ahhhh.....
If there's one good thing to say about all this, the fact it's open source and I can even look at it all, and open issues on GitHub against the US Government's code for authenticating citizens... well just that is pretty awesome.
It seems very big brother-ish to me.
https://github.com/18F/identity-idpI'm sure they have some bright (and altruistic) employees, but I'm not sure the best engineers in the world would work there when they can earn far more compensation at a tech company.
It seems deeply cynical to correlate geographic areas with salaries and infer that the best engineers in the world will be drawn there, bar none. There are other incentives. Some might even say that engineering of this sort is better executed, or more trustworthy, when performed by people with civic motivations rather than mercenary ones.
Also the salary cap is $161,900, as shown in this pay grade table for SF: https://www.opm.gov/policy-data-oversight/pay-leave/salaries... Not a top-of-the-line private sector salary, but not some kind of hardship.
> Some of you, not all of you, are working right now on another app for people to share pictures of food or a social network for dogs. I am here to tell you that your country has a better use for your talents. [...]
> The Social Security Administration mails checks from a mainframe running COBOL, which might kind of be OK except that more than half of the workforce that maintains it is at or near retirement age. What happens then? The Department of Veterans Affairs has a serious backlog of disability claims. The U.S. Citizenship and Immigration Service processes permanent resident applications and everything else on paper. If you lose your green card, it will take you 6–8 months to get a new one and in the meantime you will not be able to prove you have the right to be in the country or get a job.
> All of these are design and information processing problems and all of these are matters of life or death to millions of citizens and all of them are things you can fix if you choose to.
Think about the response to the hurricane this weekend - that's a government function, and we need talented people serving to make sure that people who lose their homes retain access to shelter.
[1]: https://medium.com/the-u-s-digital-service/mikey-dickerson-t...
The only person I know who works for USDS is one of the most talented engineers I've ever met. He's a foreign national but was recently naturalized.
He made boatloads of money off of stock options and loves the idea of solving these kinds of problems.
He owns a house in a western state but maintains an apartment in DC and jokes that he "loses money" by working for the government.
I'm sure not everybody's like him, but come on, give USDS a chance.
I don't buy it.