On 2014/11/18, at 17:08, Nat Sakimura wrote:

> The code verifier is 256 bit high entropy cryptographic random. 
> 
> Let D:= {d | all possible 256 bit random}. This is the set of all possible 
> code verifiers. 
> Let S be SHA256 function. 
> Then, set of all possible code challenge corresponding to D, which is denoted 
> by R, is defined as: 
> S:D->R. 
> Note that D=R. 
> Rainbow table attack is to prepare a mapping table enumerating d∈D to r∈R and 
> look up the value of ri=code_challenge to find the corresponding di, the 
> code_verifier. 
> Let such table to be expressed by T. 
> Salting is creating a string d'=s||d where '||' is the concatenation operator 
> and s is a string of length > 0. 
> Let D':={any d'}. 
> Let R'=S(D'). 
> Note that by the nature of S, R'=R=D.  
> 
> Suppose the attacker who has T but does not have the corresponding salted 
> table T' observed the code_challenge r'. 
> He can still look up r' from T and find the corresponding value for the 
> code_verifier, v, in it. 
> Note v!=d', but S(v)=S(d'). (At this point, we have found a weak collision in 
> S!) 
> Then, the client can send v as the code_verifier to the server and still the 
> verification at the server succeeds. 

>From the view point of the definition of the scheme, this point is incorrect 
>and a big mistake.
The server should not accept v where v!=d', but S(v)=S(d') .
The server should accept v where v!=d', but S(v || client_id) = S(d') .
That's why the attacker must be under the stronger constraint.

When the server verifies code_verifier, 
the server should check the below equality:
code_challenge = base64url(sha256( "server's received value" || client_id))

it should not check:
code_challenge = base64url(sha256("server's received value"))

These ware said before.

Moreover, even if code_verifier has low entropy, 
the situation must be better rather than worse in this case.



> i.e., salting did not make it harder for the attack to succeed. 
> 
> You could also argue that by salting, the search space become larger. 
> However, this is true if D is a strict subset of D' because then S(D) will be 
> a strict subset of S(D'). However, due to the definition of D, S(D)=S(D'). 
> 
> Finally, let us take a substantially smaller subset C of D as the domain of 
> S. Let C' be the set of x||c where x is a salt and c is an element of C. 
> Suppose that C was known by the attacker and the attacker has created the 
> corresponding table Tc. This is typically the case when the distribution of d 
> is not uniform and skewed, such as often used passwords. In this case, 
> salting used to help as calculating new hash from C' was typically slower 
> than reading out Tc. This holds true as long as the speed of lookup of the 
> 256bit value from the table is faster than calculating a S(c'). This, 
> unfortunately is no longer true as John has pointed out [1]. But again, this 
> become irrelevant when C=D. 
> 
> [1] Use of PBES2 with increasing n is an attempt to keep this (lookup time) < 
> (calcluation time) formula.
> 
> Best, 
> 
> Nat
> 
> On Tue Nov 18 2014 at 14:34:03 John Bradley <ve7...@ve7jtb.com> wrote:
> I think where we are differing is that you think looking up a precomputed 
> plain based on a indexed hash across some sort of media can be done faster 
> than 3 Giga SHA256 Hash/s.
> on a small system http://thepasswordproject.com/oclhashcat_benchmarking
> 
> I don't think the largest disk arrays can keep up with that.
> 
> Do you have some evidence that shows that precomputing hashes would be an 
> effective attack against 256 bits of entropy.   I agree that it would be 
> agains the 40 ish bits of entropy in a password.
> 
> The likely mitigation is using PBKDF2 or BCrypt rather than SHA256, but that 
> would slow adoption and can be added later.
> 
> John B.
> 
> 
> 
> 
> My contention is that it can't
> > On Nov 17, 2014, at 10:27 PM, takamichi saito <sa...@cs.meiji.ac.jp> wrote:
> >
> >
> > I agree that GPU can/may find the value on the fly.
> > But, it can not find it within the session.
> > The draft idea is enough against the attack with GPU.
> >
> > On the other, the draft idea provide ONLY one combination of hash and its 
> > plain. The attacker can prepare THE COMBINATION to success the attack.
> >
> > Adding client_ID or server_ID separate the searching space.
> > Then the attacker have to find the value in each case for the attack.
> > (The reason was said before.)
> >
> >
> > (2014/11/17 13:33), John Bradley wrote:
> >> The question is what is the attack.
> >>
> >> Any salt added needs to be communicated from the client to the AS, so we
> >> must assume that the attacker has it.
> >>
> >> The attacker can then a) create rainbow table using the client id or
> >> whatever is the known salt.  Yes the attacker  must create a new table
> >> per client.
> >> Salting is really only effective for low entropy passwords to try and
> >> slow down a rainbow table attack by making the input to the hash be
> >> higher than the that of the password on it's own.
> >>
> >> Currently attackers can generate over 4Billion SHA256 hashes per second
> >> on a single GPU card.  (Thank you bitcoin)
> >>
> >> It is faster to generate the hashes than to look them up via a index.
> >>
> >> If you are generating the hash in real time salting provides no
> >> determent, as the salt is just included in the hash calculation.
> >>
> >> If the code verifier was a password rather than a 256bit random key then
> >> a hash would add value against rainbow tables.
> >>
> >> In reality finding a collision against a salted password is much easier
> >> using real time hash generation than by using rainbow tables.
> >>
> >> Using SHA256 with a short hash is not safe for passwords any more.
> >> Something like PBES2 with at-least 200 rounds needs to be used, if you
> >> want have password files from being compromised quickly if disclosed.
> >>  (Yes I know people are not doing that,  and hence part of the reason
> >> why passwords are no longer secure)
> >>
> >> More entropy in the code verifier adds to security eg moving to SHA512
> >> and larger verifiers, but adding a salt to SHA256 is basically a no op
> >> when defending against modern attacks.
> >>
> >> I did originally agree with your position and wanted to HMAC the
> >> client_id to defend against rainbow tables, however I am now convinced
> >> that the attack has moved on so that is no more efective than a plain
> >> hash over a random 256bit value.
> >>
> >> John B.
> >>
> >>> On Nov 16, 2014, at 11:06 PM, Nat Sakimura <sakim...@gmail.com
> >>> <mailto:sakim...@gmail.com>> wrote:
> >>>
> >>> I am actually not convinced. Since the code verifier is 256bit random,
> >>> adding salt does not seem to help.
> >>> Salting definitely helps if len(password) << 256 bit, but ...
> >>>
> >>>
> >>> On Mon Nov 17 2014 at 11:39:07 takamichi saito <sa...@cs.meiji.ac.jp
> >>> <mailto:sa...@cs.meiji.ac.jp>> wrote:
> >>>
> >>>
> >>>
> >>>    (2014/11/14 13:02), Bill Mills wrote:
> >>>    > Yes, "plain" is actually sufficient.  The hashed value protects
> >>>    against
> >>>    > disclosure/logging threats on the server auth server and proxies
> >>>    perhaps
> >>>    > where the HTTPS is terminated somewhere other than the auth server
> >>>    > itself, it's not actually required for the basic
> >>>    functionality/security
> >>>    > of the mechanism.
> >>>
> >>>    In the threat model of the SPOP scheme, a wiretap is in it.
> >>>
> >>>    And more, the hash is not used to keep secretly in the sever/client.
> >>>
> >>>
> >>>    >
> >>>    >
> >>>    > On Thursday, November 13, 2014 7:07 PM, takamichi saito
> >>>    > <sa...@cs.meiji.ac.jp <mailto:sa...@cs.meiji.ac.jp>> wrote:
> >>>    >
> >>>    >
> >>>    > Sorry for my poor english.
> >>>    >
> >>>    >
> >>>    > 2014/11/14 10:55、Bill Mills <wmills_92...@yahoo.com
> >>>    <mailto:wmills_92...@yahoo.com>
> >>>    > <mailto:wmills_92...@yahoo.com
> >>>    <mailto:wmills_92...@yahoo.com>__>> のメール:
> >>>    >
> >>>    >  > The whole mechanism relies on the attacker not having access
> >>>    to the
> >>>    > code_verifier or hash.  It's defending against the attacker
> >>>    getting the
> >>>    > code via weakness in IPC or other such mechanism like URI
> >>>    handlers.  How
> >>>    > many more bits is secure beyond 256 bits of entropy
> >>>    recommended?  If you
> >>>    > want to make it longer then just make it longer, salting doesn't
> >>>    really
> >>>    > help that much.
> >>>    >  >
> >>>    >  > The original value or the hashed value *should* be protected
> >>>    by the
> >>>    > transport security, and if it isn't then the attacker could be
> >>>    stealing
> >>>    > the original credential used to authenticate anyway.
> >>>    >  >
> >>>    >
> >>>    > Is it correct?
> >>>    > You mean that we don’t need to use hash itself? Only to use
> >>>    plain is enough?
> >>>    >
> >>>    >
> >>>    >  >
> >>>    >  >
> >>>    >  >
> >>>    >  > On Thursday, November 13, 2014 5:40 PM, takamichi saito
> >>>    > <sa...@cs.meiji.ac.jp <mailto:sa...@cs.meiji.ac.jp>
> >>>    <mailto:sa...@cs.meiji.ac.jp <mailto:sa...@cs.meiji.ac.jp>>> wrote:
> >>>    >  >
> >>>    >  >
> >>>    >  >
> >>>    >  > Hi all,
> >>>    >  >
> >>>    >  > I appreciate this idea, simple and powerful to achieve proof of
> >>>    > possession.
> >>>    >  > But, I have some questions against the scheme.
> >>>    >  > Sorry if these ware already discussed.
> >>>    >  >
> >>>    >  > I worry about using a hash function in simple way.
> >>>    >  > I mean, a simple use of random as code_verifier may cause that
> >>>    > malicious client can have any code_verifier and code_challenge.
> >>>    >  > All combinations of random and its hash can be obtained, it
> >>>    may not
> >>>    > be risk?
> >>>    >  >
> >>>    >  > So, we should use:
> >>>    >  > S256 "code_challenge" = BASE64URL(SHA256("code___verifier" +
> >>>    “client ID”))
> >>>    >  > or
> >>>    >  > S256 "code_challenge" = BASE64URL(SHA256("code___verifier" +
> >>>    “client
> >>>    > ID” + “server ID”))
> >>>    >  > Where, you know that client ID is client’s unique name.
> >>>    >  >
> >>>    >  >
> >>>    >  > Other problem is the following, using Nat’s slide:
> >>>    >  > http://www.slideshare.net/nat___sakimura/1112-spoppresso
> >>>    <http://www.slideshare.net/nat_sakimura/1112-spoppresso>
> >>>    > <http://www.slideshare.net/__nat_sakimura/1112-spoppresso
> >>>    <http://www.slideshare.net/nat_sakimura/1112-spoppresso>>.
> >>>    >  >
> >>>    >  > 0.    Attacker prepares own code_verifier and code_challenge.
> >>>    >  > 1.    replage legitimate challenge with malicious code_challenge.
> >>>    >  > 5. Attacker can submits own code_verifier.
> >>>    >  >
> >>>    >  > It may be out of the draft, I think.
> >>>    >  >
> >>>    >  > Best regards,
> >>>    >  >
> >>>    >  >
> >>>    >  > ;; takamixhi saito
> >>>    >  >
> >>>    >  > _________________________________________________
> >>>    >  > OAuth mailing list
> >>>    >  > OAuth@ietf.org <mailto:OAuth@ietf.org> <mailto:OAuth@ietf.org
> >>>    <mailto:OAuth@ietf.org>>
> >>>    >  > https://www.ietf.org/mailman/__listinfo/oauth
> >>>    <https://www.ietf.org/mailman/listinfo/oauth>
> >>>    >
> >>>    >  >
> >>>    >  >
> >>>    >
> >>>    >
> >>>    > ;; takamixhi saito
> >>>    >
> >>>    > _________________________________________________
> >>>    > OAuth mailing list
> >>>    > OAuth@ietf.org <mailto:OAuth@ietf.org> <mailto:OAuth@ietf.org
> >>>    <mailto:OAuth@ietf.org>>
> >>>    > https://www.ietf.org/mailman/__listinfo/oauth
> >>>    <https://www.ietf.org/mailman/listinfo/oauth>
> >>>    >
> >>>    >
> >>>
> >>>
> >>>    --
> >>>    ;; takamixhi saito
> >>>
> >>>    _________________________________________________
> >>>    OAuth mailing list
> >>>    OAuth@ietf.org <mailto:OAuth@ietf.org>
> >>>    https://www.ietf.org/mailman/__listinfo/oauth
> >>>    <https://www.ietf.org/mailman/listinfo/oauth>
> >>>
> >>> _______________________________________________
> >>> OAuth mailing list
> >>> OAuth@ietf.org <mailto:OAuth@ietf.org>
> >>> https://www.ietf.org/mailman/listinfo/oauth
> >>
> >
> >
> > --
> > ;; takamixhi saito
> >
> > _______________________________________________
> > OAuth mailing list
> > OAuth@ietf.org
> > https://www.ietf.org/mailman/listinfo/oauth
> 
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth


;; takamixhi saito

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to