765 karma · joined October 4, 2012
2. You have the client side code. I'm happy to provide the remaining code if anyone is actually curious.
If I understand your attack, you'd need to set up a clone website that resends the password in the clear, have a malicious network redirect me to it and get me to enter my password. I'm happy to enable to you to demonstrate that it works. The hardest part is presenting a valid SSL certificate. As I warned in the initial post, "I won't promise to log in if you can't provide a valid SSL certificate."
Email me and we can arrange the details.
If a server is taken over, the best one can hope for, is sufficiently layered defenses to limit the immediate gains of the attacker and an alarm to warn users not to trust the application until further notice.
Different systems are secure against different threats. Sticky notes are secure against people who can't get physical access to their location.
The question in this case is what attacks this experiment is secure against.
Propose a practical attack against this app and I'll help you carry it out.
I'm attempting to give those who believe that JS crypto should never be used a way to make a clear public demonstration. What better target could you ask for? A web application hacked together in a few hours by someone with no training in computer security who isn't even a professional software engineer and who is willing to arrange scenarios favorable to the attacker.
I'm not aggrieved by the negative reaction. I have no skin in this game. I don't earn anything if people walk away believing this idea is more secure. I just wish you wouldn't keep repeating the same canard about having to bootstrap the crypto on every use while attacking the messenger and the manner in which the message is being delivered.
Edit: I have no specific problem running ssh as a Java applet if I trusted the site and connection. How do you determine when you're comfortable upgrading ssh or any other security program through your package manager?
Regardless, what do you think of someone who publicly calls something a terribly insecure idea, and then reacts with snark and doesn't actually attempt to crack the system when the opportunity is put before him by someone willing to bend over backwards to help him crack it?
Propose a plan to actually crack the system. Do you want the database? Do you want to control the network where I log in?
I agree with you that there are risks to browser side crypto but how are they any different from upgrading software without reevaluating the security of each upgrade? Browser-based crypto also has benefits; most users prefer using web applications to installed all else equal because it's easier.
Since PerceivedBenefit(X) and Actions will both vary by individual and are controllable through learning and discipline, I'd rather give individuals the right to choose.
Equivalent examples: Seatbelts are bad since people will drive recklessly; calculators are bad since people won't bother learning arithmetic; cars are bad since people will walk less. In each case, the negative does occur. I'd argue that as a whole society is better for all of those.
That said, the key for security is to design an app where compromising the server isn't possible.
Would you make the same argument for native application? Unless you read the source code every time you upgrade, you're exposed to the same risk. cperciva did an inadvertent real world experiment on this by making an error during a refactoring of Tarsnap and it took 19 months for a subtle crypto bug to be noticed.
Re: Slavery use. Slaves were called chattel because they were property; that was the disgrace.
Of course, the real question anyone asked to develop such a program would be what runtime is equivalent to an infinite loop. Any real-world program must have a runtime bound that is predictable on invocation or it's useless.
One need only specify some reasonable length either equivalent to infinity for such a program, use a heuristic of checking whether the program is in the same loop and if so, whether any of the variables involved in determining loop termination are changing. Of course, proper security precautions are required.
I would argue that the whole point of HN is to think through arguments in other domains and build intuition by reasoning through problems and arguments. Otherwise, what's the point? No one is going to arrive at this thread and scan the top-rated comments for the solution to his school district's problems.
In cases where actual decisions are being made where the analyses are much more thorough and fully validating much more expensive, other techniques are available. First, one generally builds an awareness of the strengths of each team member which suggests where errors may be more likely. Additionally, one can check a random set of the most likely problem areas. Perhaps, most importantly, while everyone won't re-do every analysis, it's highly unlikely that an any important analysis will only be done once. So one can expect that the high-level results are generally consistent.
As for my formal stats training: None beyond High School. That said, I've worked with and interviewed many with far more training. One thing, I learned is that most people don't have great intuition for statistical problems and it's not terribly highly correlated with years of schooling. I've met PhD's in economics and statistics who have made basic conceptual errors as well as those with less training who were more reliable.
So while training may be correlated with accuracy, you should still demand a well-reasoned argument and think critically about it.
Note that this isn't strictly equivalent for several reasons. The game above the error is part of the generating process instead of the measurement process. Also the distribution is district rather than continuous. The key commonality is that a weak predictor at an individual level can be a meaningful predictor at a group level.
Grouping data points does mask volatility. This doesn't make the effect any less real on the societal level. If we seek to improve student performance, skewing the pool of teachers towards the better ones will do that.
Yet there is also an enormous amount of volatility which is also real. Ideally we would just create better predictors. Constraining ourself for the moment to this set, since they have high error rates on the individual level, it's also reasonable to assert that in relying on this metric, we will make unfair decisions for many teachers.
The right solution depends on how much you value optimizing student outcomes vs. optimizing fairness as well as second order effects such as driving away teachers. My bias would be to use these scores for economic incentives to attempt to ensure that retention for the best teachers is higher than for the worst. Without additional work, termination likely isn't warranted based on this data.
To those who argue that pay differentials require better evidence, I would suggest comparing the validity of performance evaluations across any other job. It's imperfect but better for society than doing nothing.
For long-term fairness, it's important that there isn't a single value-added model. Competitive pressure can do wonders to improve model quality and it's also fairer since those who don't do well on one model can move to a different rubric.
That said, 50000 is too few. For a dataset of this size, 20 million records is likely more reasonable. The actual answer depends on the variance of the individual predictors and their correlation with each other.