572 karma · joined September 18, 2010
The idea of that attack is similar to what we did in CRIME, but applies to HTTP responses. Basically you inject enough data to split the response into two records and drop the second one. Some browsers would happily accept the truncated response, and change their state. As a result you could remove the Secure flag on the Set-Cookie header, and steal the cookies if the server or the client doesn't support HSTS.
Believe it or not, I've seen many people thinking that KE alone is enough to build a secure channel. This misconception is probably as widespread as encryption provides message integrity. One needs to know he's talking to the right person, otherwise he's vulnerable to some man in the middle.
There are many ways to solve this authentication problem. A large number of TLS ciphersuites uses PKI, but there are also ciphersuites using pre-shared key or password such as TLS-PSK or TLS-SRP. PAKE protocols use a password to authenticate each other, e.g., if only Bob could know the password he's the only one could finish the protocol with Alice.
Recently I've worked on some authenticated key exchange problems not using a password, which could be fun to think about:
1) How to build a secure inter-app channel on iOS.
2) How to bootstrap keyboard-less devices to password-protected WIFI network.
> virtually every modern TLS break came from ideas that Perrin popularized
oh i didn't know this. what are the ideas?
> And of course, there are VPN tunnels between data centers in addition to the above.
Could you please be more specific on the VPN solution that you are using? How do you manage the shared keys? How do you make sure 'system administrators can't easily read the traffic?"
1) You need to generate keys that nobody can guess.
2) Much of modern crypto is built based on probabilistic encryption [1].
I'm surprised that the fix in Wordpress wasn't explicitly marking fields that need to be serialized/unserialized, instead of second-guessing based on the broken promise by MySQL.
> MySQL replaces characters it doesn’t recognize (for the given character set), with a placeholder. MySQL will sometimes replace byte sequences with “?” or “�” (U+FFFD). Such replacements would not be harmful.
This is so wrong. A database must never change any data that it's asked to stored. Wordpress, and other applications, always make that assumption, and when it isn't true anymore all hell breaks loose.
PS: it blows my mind that it looks like strpos in PHP could return either boolean or integer [1].
[1] http://core.trac.wordpress.org/browser/tags/3.6.1/wp-include...
His bug allowed him to inject links into verification emails sent by Google Scholar. He claimed that he could inject CSS links too, but that didn't make this problem any worse. Why? Because it's up to mail clients to load the linked CSS stylesheets or not. Gmail, for example, would never load those remote CSS files. If your webmail client does that, it's time to switch to a better one.
So he could inject links, which is annoying, but still a very minor issue. It may make phishing a bit easier, but you know what phishing has always worked against average Joe if you try hard enough. That means that this problem doesn't really give an attacker any advantages that he couldn't do by himself.
Disclaimer: I'm a member of the team that handles VRP.
No, it wasn't Bard's. It's Rogaway and Dei's.
1. Locate a public string. A tweet or a quote should suffice.
2. SHA-512 the string to obtain a seed.
3. Use that seed to generate b, and calculate N = #E(Fp) = n * h, and choose a base point P. Of course we need to ensure that these parameters are safe against known attacks.
4. Mandate that the new set of parameters MUST be supported wherever NIST prime curves are supported.
The last step is probably the most difficult. You don't need that if you don't need to interoperate with other implementations though.
I don't think BEAST was a product of Bard. If we read Bard's papers then we probably never came up with BEAST [1]. Bard wanted to apply Rogaway-Dai's attack to SSL, but he didn't understand how browsers worked. His papers didn't target cookies - in fact he didn't even mention that word - but he wanted to decrypt short PIN sent in POST requests, which is impossible as far as I can tell. The reason we cited Bard was because his English is much better than us, so we'd thought that we could re-use his explanation of Rogaway-Dai's attack in the context of SSL. In other words, we both attempted to exploit the same vulnerability, but we used different approaches and targeted different secrets.
Another way to look at this: imagine if one reads Bard's do you think if he or she could use any of Bard's ideas to invent new BEASTies attacks, e.g., CRIME, Lucky 13, the RC4 attack, <your attack here>?
It's the same attack. CRIME works for TLS compression, SPDY header compression (yes it broke HTTP/2.0 even before it's called HTTP/2.0), and HTTP gzip response. BREACH was described in slide 39 in our presentation. We didn't test it because it's an application-dependent attack, and we couldn't find a nice target. We're happy that BREACH authors have found a very good target, and proved that the attack works.
See: https://docs.google.com/presentation/d/11eBmGiHbYcHR9gL5nDyZ...
I've worked on password hashing recently, and I think the best interfaces should take only a password, and return a hash. Modern password hashing algorithms, e.g., bcrypt, scrypt, etc., usually also need a set of local parameters. The API should hide them as well, and expose only a set of interfaces with safe and sound preconfigured parameters, which in turn determine how much CPU time and memory space will be used. One disadvantage of this approach is that it exposes the local parameters, hence make it a little bit easier for attackers.
This is exactly how crypto primitives have been designed. If the designers of AES ever let people choose the key size, sooner or later some people would shoot themselves in the foot, and set the key size to 1-bit. If you think this is an extreme example, it actually has happened, not in some obscure API that nobody uses, but in the very XMLDsig standard published by W3C [1].
Regarding password hashing standards, I found many misuses of libscrypt that would make it extremely easy to recover passwords. But I'll save the details for another blog post or something.
[1] http://www.w3.org/QA/2009/07/hmac_truncation_in_xml_signatu....
I found it's surprising that you interpret the quote this way. Here's my interpretation: privacy on the Internet is an illusion.
What the OP was seeing is probably a special class in a high school for gifted students. Since winning national and international student competition is kind of a big deal in Vietnam, most major cities and provinces have such a school, but it's not easy to apply to them. All schools require applicants to take some tough and competitive entrance test that may have math problems harder than those in SAT or even GRE. As a result, the students who get in are usually the best of their ages, and they will be trained rigorously and restlessly for three years with the sole goal of winning a major programming contest such as IOI. That means they are the exception, not the norm. Most high school and even university students in the country can't tell what a loop is, let alone solving algorithmic problems.
[1] https://docs.google.com/presentation/d/11eBmGiHbYcHR9gL5nDyZ...
Data compression is often used in data storage or transmission. Suppose you want to use data compression in conjunction with encryption. Does it make more sense to
A. Compress the data and then encrypt the result, or
B. Encrypt the data and then compress the result.
Now we know the correct answer is Neither.
[1] http://crypto.stanford.edu/~dabo/cs255/hw_and_proj/hw1.pdf
Did you see the BEAST attack? Exactly one byte at a time: http://www.youtube.com/watch?v=BTqAIDVUvrU
SRP uses SHA1, but not just that. Here is the relevant part of the RFC [1]:
The host stores user passwords as triplets of the form
{ <username>, <password verifier>, <salt> }
Password entries are generated as follows:
<salt> = random()
x = SHA(<salt> | SHA(<username> | ":" | <raw password>))
<password verifier> = v = g^x % N*
[1] http://www.ietf.org/rfc/rfc2945.txt