Smaller than Bloom filters
imperialviolet.org
imperialviolet.org
If 1 out of 1024 false positive is the target, then using 8 bytes per entry should be more than enough, which gives ~3MB of data without any magic.
The article is a bit untidy, so it would be nice to get a clearer picture of the sizes of the different approaches.
But that's the uncompressed filter. It compresses way, way down: to about 8 bits per entry. That gives 400KB of data, still with a 1/1024 false-positive rate. Much better than 3MB.
If you consider (uncompressed) Bloom filters with arbitrarily many hashes, the best you can do for a false-positive rate of 1/1024 is about 14 bits per entry.
But the point was that you can beat a Bloom filter on size, for the same performance, if you use only a single hash function (making the Bloom huge) and then compress the result.
Of course, you lose the random access in that case and, if you're looking at processing the whole thing for a lookup, then the volume of the uncompressed data becomes a concern. Thus the GCS...
Which values are you using for the matching? I was assuming a fingerprint of the cert. Have you considered compressing the domains? Compiling them to a DFA should yield a very small structure, and you then will need far fewer bits for the actual fingerprint.
Shouldn't the filter size be based on total elements to be checked, not elements stored? Assume there are only 1000 revoked certs. If a bloom filter were used, it'd have to still be huge to keep a low false positive rate, because there's millions(?) of valid certificates, correct?
Please, could someone fill in what I'm missing here?
Keeping a low false positive rate is important because, in the event of a hit in the filter, the resulting OCSP check has to be hard-fail and, if that starts bringing down good sites, then that's a problem.
In the end, we have to collect data and see how it does in the real world. The theory suggests that it might work but reality always has tricks.
False positives are MUCH better than false negatives. It's safer to reject a valid cert than to accept an invalid cert.
I imagine 99.9% of the time (totally made up), certificates will be valid, and the bloom filter will agree they are valid. In the 0.1% of the time the bloom filter rejects, go and actually check.
Definitely worth a read, if any of that sounded interesting.