Netflix announced that it has implemented efficient HTTPS encryption for its video streams. To this point, the company has used only HTTPS to protect user information.
Netflix has been reluctant to adopt HTTPS for its video streams so far because delivering video is already a bandwidth-heavy task, and adding encryption on top of that risked adding too much overhead. To solve this problem, the company searched for the ideal cipher and its fastest implementation.
Cipher Evaluation
Netflix eventually chose the the Advanced Encryption Standard (AES) cipher in Galois/Counter Mode (GCM), which is available only in TLS 1.2 and later. The company chose GCM over the Cipher Block Chaining (CBC) method because it can encrypt and authenticate the message simultaneously, whereas AES-CBC requires an additional pass over the data to generate keyed-hash message authentication code (HMAC). The latter can still be used as fallback for older browsers and client software that don’t support TLS 1.2. However, it shouldn’t be too long until virtually all Netflix users can play video streams over TLS 1.2 or later.
The company also tested which were the fastest implementations of AES-GCM in various TLS libraries such as OpenSSL, Google’s BoringSSL, and Intel’s Intelligent Storage Acceleration Library (ISA-L). The implementations had to work best with AES-NI, the instruction set for Intel and AMD processors that significantly accelerates encryption and decryption.
Other Optimizations
Netflix and the team behind the Nginx server software collaborated to improve how fast the data is sent from the server storage to users’ video players. However, the method Netflix has been using to improve the performance for that task wasn’t compatible with TLS encryption.
The company was able to fix this issue by creating a hybrid TLS scheme where the data is encrypted in kernel space while the session management remains in user space.
Results
Netflix then tested the BoringSSL and ISA-L AES-GCM implementations and compared them with a baseline OpenSSL implementation. Both managed to increase the performance over the baseline OpenSSL implementation by 30%. Ultimately, Netflix chose the ISA-L library for slightly better performance than BoringSSL. The company is now optimistic that it can add HTTPS encryption to all of its streaming clients without suffering too much of a performance hit compared to the unencrypted versions.