Live data from Hacker News

Ask HN: Can A give permission to C to access B, without B talking to A?

news.ycombinator.com

21–29 of 29 posts

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#21
I think a couple suggestions already point this way, but this I think is more detailed (which may or may not be helpful):

When A talks to B the one time it is allowed to, it gives B an X.509 certificate to which A holds the private key for each role for which A is permitted to delegate access on B. A later gives C a certificate, signed with the appropriate private key, for each role on B to which it is delegating access to C.

C then presents the appropriate certificate to B with any operation, proving that it has been authorized.

(You can do this with just one certificate for each A->B and A->C->B if you identify the roles within the certificate, which is technically doable within X.509 but I think requires going through IANA to get official identifiers for each role to be delegated -- these would be identified in the certificate A gives to C to present to B -- which may or not be practical.)

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#22
Is this a homework question on HN?

http://en.wikipedia.org/wiki/File:Kerberos.svg

I generally frown on the "need" for higher education as a requirement for work, but this is pretty basic stuff?

On the off chance that it wasn't, perhaps you want to look into ssh certificates (as an alternative to kerberos), or CAS for a way to deploy something kerberos-like for web:

http://jasig.github.io/cas/4.0.x/protocol/CAS-Protocol.html

For web, one of the big issues with login is managing both Single-Sign On (eg: you can be logged into an authentication provider like gmail or facebook, and then not have to authenticate again (with eg. login/pw) to use a different service (like... um... blogger or flickr or something that delegates authentication (who you are), and does authoriation based on that (now that I know who you are, what are you allowed to do).

And managing Single-Sign Out: when you log out from one service, all tokens/sessions etc are logged out. So if you click logout in flickr, you're also logged out from facebook.

As for ssh certificates, they (can) AFAIK embed information on who you are (uid) and where you can log in from (source-ip), and where you can log in to (uid@host), along with an expiry date. The client gets a cert from the CA, the ssh server gets a cert from the CA, and the ssh server can look at the cert and see a) it's valid, b) it's valid for user X, c) it's valid for user X from ip n.n.n.n and d) it's valid for user X@server.

It does not allow for too fine grained delegation of authorization without some other method (eg: communication between the ssh server and a trusted authority, like radius, ldap etc).

[ed: as others noted, see also x509, of which ssh certs is a simplification, intended for use with ssh]

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#23
post #22

Is this a homework question on HN? http://en.wikipedia.org/wiki/File:Kerberos.svg I generally frown on the "need" for higher education as a requirement for work, but this is pretty basic stuff? On the off chance that it wasn't, perhaps you want to look into ssh certificates (as an alternative to kerberos), or CAS for a way to deploy something kerberos-like for web: http://jasig.github.io/cas/4.0.x/protocol/CAS-Protoc…

Thanks for the reply. This is not homework. I'm actually trying to find a solution for something at work, and I've never had work on something like this.

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#24
post #22

Is this a homework question on HN? http://en.wikipedia.org/wiki/File:Kerberos.svg I generally frown on the "need" for higher education as a requirement for work, but this is pretty basic stuff? On the off chance that it wasn't, perhaps you want to look into ssh certificates (as an alternative to kerberos), or CAS for a way to deploy something kerberos-like for web: http://jasig.github.io/cas/4.0.x/protocol/CAS-Protoc…

Thanks for the reply. This is not homework. I'm actually trying to find a solution for something at work, and I've never had work on something like this.

In which case, you might want to supply us with a little more detail. Last I looked (it's been a while) CAS seemed the most sane choice for something like this for an intranet-ish thing over http(s!) -- if you can't just use ssh and ssh certs (obviously very different use cases).

Does anyone have any insight to what the state of the art is marrying kerberos ideas and nacl? I found this:

http://www.slideshare.net/pieterh/zeromq-security

But it is obviously somewhat dated now -- did zeromq+sasl+nacl go anywhere? In what form? I'd hoped that this would "get sorted" and allow saltstack to leverage something a little more standard (which would alleviate my last doubts about salt -- but my fears might be unfounded -- I've just not seen anything that really addresses the early issues they had with security/transport/encryption).

Anyone using: https://github.com/zeromq/libcurve in anger?

Finally, I can't resist posting this soundtrack that I had serendipitously playing in the background as I read the above slidedeck: "Nothin' - Townes Van Zandt". Seemed oddly appropriate to go along with forward secrecy:

https://www.youtube.com/watch?v=zZcH2OOMV4A

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#25

I think a couple suggestions already point this way, but this I think is more detailed (which may or may not be helpful): When A talks to B the one time it is allowed to, it gives B an X.509 certificate to which A holds the private key for each role for which A is permitted to delegate access on B. A later gives C a certificate, signed with the appropriate private key, for each role on B to which it is delegating acc…

Does anyone have happy memories using SAML for anything remotely useful? It always struck me as possibly even more convoluted to get right than x.509 (and recall eg: python not validation server host names in certs by default for a long, long time -- so getting x.509 right in production isn't exactly trivial -- especially if you're not a domain expert).

That said, yes I think SAML could be leveraged to fulfill the requirements in the question. I just think it would be quite painful ;-)

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#26
post #24

Earlier quoted context omitted.

Thanks for the reply. This is not homework. I'm actually trying to find a solution for something at work, and I've never had work on something like this.

In which case, you might want to supply us with a little more detail. Last I looked (it's been a while) CAS seemed the most sane choice for something like this for an intranet-ish thing over http(s!) -- if you can't just use ssh and ssh certs (obviously very different use cases). Does anyone have any insight to what the state of the art is marrying kerberos ideas and nacl? I found this: http://www.slideshare.net/piet…

I wanted to understand the problem at an abstract level, rather than describing my exact use case, leading people into digressions, debates, etc.

Also note, I answered my own question with HMAC being the probable solution (before anyone else mentioned HMAC), and others seemed to verify that this might be the best fit by answering with the same thing shortly thereafter. If I can give permission and I only need to provide permission, the only thing I only need is a way to transmit a message and prove that it wasn't modified while in-transit.

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#27
post #18

Earlier quoted context omitted.

Thanks. Is there a specific reason why handling the key is tricky? Or, is this just a matter of keeping it secret?

Yeah, it definitely needs to be kept secret. Since you specified that A and B can have a set-up phase before C is around, the initial setup is fairly straightforward. Depending on what the system is used for, how valuable breaking into it would be, and how long you expect it to be up, you might need to rotate the key every so often, by having A and B agree on a new key. This is a little more complicated; since B now…

Ah, I see - thanks for this clarification. Alpha server and Beta server can actually communicate after the initial setup, but I didn't want this to be a consideration in my scenario, since I don't want any such communication to be required during each permission message transaction (once per hour or day, etc. would of course be fine).

Perhaps, I will provide an API method for automatically expiring an HMAC and fetching a new one. During this rollover period, messages sent using the old HMAC will be allowed to fail, since they can just come get a new copy from Alpha server.

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#28
post #22

Is this a homework question on HN? http://en.wikipedia.org/wiki/File:Kerberos.svg I generally frown on the "need" for higher education as a requirement for work, but this is pretty basic stuff? On the off chance that it wasn't, perhaps you want to look into ssh certificates (as an alternative to kerberos), or CAS for a way to deploy something kerberos-like for web: http://jasig.github.io/cas/4.0.x/protocol/CAS-Protoc…

Thanks for the reply. This is not homework. I'm actually trying to find a solution for something at work, and I've never had work on something like this.

I strongly advise you to seek professional assistance with this. Everyone who has ever attempted to implement any kind of security mechanism without significant previous experience has failed, often spectacularly.

This is especially true in authentication and access control, sometimes call IDAM (look that up, read, learn).

You may do so well as to cover the vast majority of cases. Yet I guarantee you will leave an exploitable edge case that will leave your systems vulnerable. If they are Internet-facing, these vulnerabilities will be exploited, probably without you knowing it.

I encourage to read about prevent, detect, respond, and recover, about defence in depth, about Kerberos, about PKI in general, about SSL and TLS and SSH specifically, and about IDAM.

Do NOT attempt this on a production server until you know in your heart and gut and mind what was wrong with SSL v1 and v2, what is wrong with v3, and why we are now at TLS 1.2.

Do not attempt this until you understand why having keepalives outside the security envelope is a flaw in any security protocol - or until you can argue clearly and cleanly why it may not be important in your case.

Once you understand those things, you may start to understand how much you are missing. Learn about SPEKE, e.g., that will help too.

I've been a security consultant for a long time, was a development manager and developer before that. Everybody gets their first implementation wrong. Everyone.

Re: Ask HN: Can A give permission to C to access B, without B talking to A?

#29
In this scenario, is gamma a single server making requests of Beta under a single authorization?

Or is it a stand in for multiple remote resource consumers with potentially different things happening under different authorizations/identities which may require Alpha to say, "You there, Gamma_3 running a job for Mr. Manager, you are allowed to eat those Beta cookies, here's your voucher!" versus "Hey, Gamma_5 running a job for Ms. Accountant, you are not allowed to have cookies, did you want this spreadsheet Beta has?"

Post reply on HN