En juist bij vertrouwelijkheid is encryptie de enige mogelijkheid om data vertrouwelijk over een niet-vertrouwelijk medium (internet) te kunnen uitwisselen.
Encryptie van gevoelige data moet niet gebeuren door het TRANSPORT protocol. De data moet al encrypted worden OPGESLAGEN. SSL is *NIET* bedoeld als bescherming van DATA, maar van de TCP sessie. Daarbij gaat SSL en de bijhorende certificaten uit van een bepaald vertrouwen in instantie welke deze certificaten vertrekken.
Ik kan op een core router bijvoorbeeld gewoon een MITM attack opzetten als ik bijvoorbeeld een certificaat als *.google.com (wildcard) weet te bemachtigen, ondertekend door een grote organisatie zoals Comodo. Er zijn honderden, zo niet duizenden resellers welke namens de grote certificaat providers certificaten vertrekken of zo'n reseller te hacken. Immers als jij een 'geldig' certificaat hebt, kun jij een relay opzetten waarbij de client niet met Google communiceerd, maar met jouw server en jouw server bouwt vervolgens een connectie op naar Google en blijft daar tussen zitten.
Op een dergelijke manier wist Iran gmail verkeer te monitoren. Gebruikt van client certificaten maakt MITM aanvallen wel heel erg lastig, maar worden helaas zeer weinig toegepast..
Echter werpt SSL/TLS wel een flinke drempel op om de TCP sessie over te nemen. Daarom wordt wel vaker gezegd dat SSL/TLS geen beveiliging is..
SSL encryptie is alleen transport beveiliging en is (kan) zelfs transparant naar de applicatie gebeuren. Web applicaties (niet de server zelf) zijn transport onafhankelijk en het transport kan wel of niet beveiligd zijn. Applicaties welke werken met gevoelige data moeten daarom uitgaan van een NIET-BEVEILIGD transport en dus dient de client en de server zelf voor de beveiliging (encryptie, ondertekening) van de data te zorgen.
Meestal gebeurt dit in de vorm van een PKI infrastructuur. Als je van elke user een eigen publiek key opslaat op de server (en de client zijn private key zorgvuldig bewaard) kan de server de data VOOR transport al encrypten en te ondertekenen middels de public key van de client. Daardoor kan ALLEEN de client de data valideren en decrypten.
Het zorgvuldig bewaren en beschermen van de private key van de client (user) valt buiten de scope van de data beveiliging zelf. Om de private key beter te beschermen is het mogelijk deze te beveiligen met een wachtwoord.
De communicatie gaat dan VEILIG over zowel HTTP, HTTPS of welk protocol dan ook wordt gebruikt. Wordt een beveiligd transport protocol gebruikt zoals SSL/TLS, dan wordt gedurende het transport de data als het ware dubbel encrypted..
Het is NIET de taak van SSL/TLS om jouw data te beveiligen, de taak van SSL/TLS is puur en alleen een veilig transport protocol te bieden. Aangezien SSL beveiliging niet aanwezig is als het document wordt opgeslagen op een USB stick is SSL dus niet adequaat voor de beveiliging van gevoelige data in het algemeen.
Websites vormen in dit verhaal eigenlijk een uitzondering omdat technisch gezien de applicatie alleen op de server draait. In deze tijd met HTML5, Ajax technologie en libraries zoals
jsencrypt kun je steeds meer doen, maar web applicaties welke in een browser draaien, kunnen niet zomaar bestanden op de client computer openen. Dat maakt het dan weer lastig om een private key bij de client te krijgen (bijvoorbeeld via de post) en deze vanuit een Ajax applicatie te gebruiken..
En aangezien (HTML) cloud applicaties steeds populairder worden is het ook logisch dat men zich richt op een zeer vatbaar protocol zoals SSL/TLS of eigen meer de implementaties daarvan.
Dan de drie pilaren welke je noemt:
Beschikbaarheid: SSL heeft hier geen invloed op. Data welke je via HTTPS kunt benaderen kun je theoretisch ook via HTTP benaderen. Het is dan de webserver/webapplicatie welke je dan alsnog doorstuurt naar de 'beveiligde' omgeving. Maar dat valt buiten de scope van SSL/TLS
Betrouwbaarheid: SSL/TLS kan alleen de authenticiteit van data tussen twee endpoints garanderen. Bij een MITM attack zoals door de Iraanse overheid is de SSL verbinding met de relay server correct en valide. SSL/TLS kan dus niet garanderen dat data onderweg van applicatie client naar de applicatie server onderweg niet wordt gewijzigd aangezien het geen controle heeft over de route naar de applicatie server en de 'hops' daartussen.
Vertrouwelijkheid: Dit is eigenlijk een pilaar waarop SSL/TLS zou kunnen steunen, maar alleen als men gebruik maakt van client certificaten. Publieke websites maken niet gebruik van client certificaten en is dus het onderscheppen van bijvoorbeeld de Tweakers sessie cookie voldoende om over de SSL/TLS (HTPS) verbinding je als iemand anders voor te doen. Client certificaten worden vooral gebruikt bij extranet omgevingen.