|
Wedge Gerucht Crusher bracht een paar dagen geleden uit: "Zal internettoegang met openbaar WiFi de veiligheid van bankrekeningen in gevaar brengen? Het artikel introduceert enkele situaties in het gebruik van HTTPS voor netwerkversleutelde overdracht, en afgaande op het antwoord zijn er nog steeds geschillen. Naarmate het internet steeds populairder wordt, wordt de applicatie steeds wijdverspreider, en sommige netwerkbeveiligingskwesties zullen ook steeds meer aandacht trekken van internetgebruikers; hier zullen we het hebben over TLS/SSL, wat we vaak HTTPS noemen, van principe tot de daadwerkelijke applicatie om te zien wat het is, en op welke problemen je moet letten bij het gebruik van HTTPS en aanverwante beveiligingstechnieken. Cybersecurity is een holistisch evenement dat de beveiliging van personal computers, protocollen, datatransmissie en softwareontwikkelingsbedrijven en websites omvat. Ik hoop dat door beveiligingsgerelateerde kwesties stap bij beetje uit te leggen in de toekomst, meer mensen netwerkbeveiliging kunnen begrijpen, zodat ze het netwerk veiliger kunnen gebruiken. Het artikel zal lang worden en het is voorlopig gepland om het in drie delen te worden verdeeld: Het eerste deel beschrijft voornamelijk het principe van HTTPS; Het tweede deel beschrijft voornamelijk het proces van SSL-certificaatverificatie en enkele voorzorgsmaatregelen voor het gebruik. Het derde deel presenteert enkele voorbeelden van HTTPS-aanvallen. 1. Wat is HTTPS?Voordat we het over HTTPS hebben, laten we eerst bespreken wat HTTP is, een protocol dat we meestal gebruiken bij het surfen op het web. De gegevens die door het HTTP-protocol worden verzonden zijn onversleuteld, dat wil zeggen in platte tekst, waardoor het zeer onveilig is om privé-informatie via het HTTP-protocol te verzenden. Om ervoor te zorgen dat deze privégegevens versleuteld en verzonden kunnen worden, ontwierp Netscape het SSL (Secure Sockets Layer) protocol om de door het HTTP-protocol verzonden data te versleutelen, waarmee HTTPS ontstond. De huidige versie van SSL is 3.0, die is gedefinieerd in RFC 6101 door de IETF (Internet Engineering Task Force), waarna de IETF SSL 3.0 heeft geüpgraded, wat resulteerde in TLS (Transport Layer Security) 1.0, gedefinieerd in RFC 2246. In feite is ons huidige HTTPS het TLS-protocol, maar omdat SSL relatief vroeg verscheen en nog steeds wordt ondersteund door huidige browsers, is SSL nog steeds synoniem met HTTPS, maar of het nu TLS is of SSL is iets van de vorige eeuw, de laatste versie van SSL is 3.0, en TLS zal in de toekomst encryptiediensten voor ons blijven leveren. De huidige versie van TLS is 1.2, gedefinieerd in RFC 5246, en wordt nog niet breed gebruikt. Voor wie geïnteresseerd is in geschiedenis, kun je de http://en.wikipedia.org/wiki/Transport_Layer_Security raadplegen, die een gedetailleerde beschrijving van TLS/SSL bevat.
2. Is HTTPS veilig?Het antwoord is ja, het is veilig. In de komende weken zal Google HTTPS inschakelen voor alle lokale domeinen wereldwijd, hoeven gebruikers alleen met hun Google-account in te loggen voordat ze kunnen zoeken, en alle zoekoperaties worden versleuteld met het TLS-protocol, zie: http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. Hoe HTTPS werktHTTPS vereist een handdruk tussen de client (browser) en de server (website) voordat de gegevens worden verzonden, en de wachtwoordinformatie van beide partijen wordt tijdens het handshakeproces vastgesteld. Het TLS/SSL-protocol is niet alleen een set versleutelde transmissieprotocollen, maar ook een kunstwerk dat zorgvuldig door kunstenaars is ontworpen, met gebruik van asymmetrische encryptie, symmetrische encryptie en HASH-algoritmen. Een eenvoudige beschrijving van het handdrukproces is als volgt:
- De browser stuurt een set encryptieregels die hij ondersteunt naar de website.
- De website selecteert een set encryptie-algoritmen en HASH-algoritmen daaruit en stuurt zijn identiteitsinformatie terug naar de browser in de vorm van een certificaat. Het certificaat bevat informatie zoals het websiteadres, de publieke sleutel van de encryptie en de uitgever van het certificaat.
- Na het verkrijgen van een websitecertificaat doet de browser het volgende:
- Controleer de legitimiteit van het certificaat (of de instantie die het certificaat uitgeeft legitiem is, of het websiteadres in het certificaat hetzelfde is als het adres dat wordt bezocht, enzovoort), als het certificaat wordt vertrouwd, wordt een klein slot weergegeven in de browserbalk, anders wordt er een melding gegeven dat het certificaat niet wordt vertrouwd.
- Als het certificaat wordt vertrouwd, of als de gebruiker een niet-vertrouwd certificaat accepteert, genereert de browser een willekeurig aantal wachtwoorden en versleutelt deze met de publieke sleutel die in het certificaat is verstrekt.
- Het handdrukbericht wordt berekend met de afgesproken HASH, het bericht wordt versleuteld met het gegenereerde willekeurige nummer, waarna alle eerder gegenereerde informatie naar de website wordt gestuurd.
4. Na ontvangst van de gegevens van de browser doet de website het volgende: - Gebruik je eigen privésleutel om het wachtwoord te ontsleutelen, gebruik het wachtwoord om het handshake-bericht van de browser te ontsleutelen, en controleer of de HASH hetzelfde is als die van de browser.
- Een handdrukbericht wordt versleuteld met een wachtwoord en naar de browser gestuurd.
5. De browser ontsleutelt en berekent de HASH van het handshakebericht; als deze consistent is met de HASH die door de server wordt verzonden, eindigt het handshakeproces en worden alle communicatiegegevens versleuteld met het willekeurige wachtwoord dat door de vorige browser is gegenereerd en met behulp van het symmetrische encryptie-algoritme.
Hier sturen de browser en de website een versleuteld handdrukbericht naar elkaar en verifiëren ze, om te verzekeren dat beide partijen hetzelfde wachtwoord hebben verkregen, en de gegevens normaal kunnen versleutelen en ontsleutelen, en een test uitvoeren voor de daaropvolgende overdracht van echte gegevens. Daarnaast zijn de encryptie- en HASH-algoritmen die vaak door HTTPS worden gebruikt als volgt: - Asymmetrische encryptie-algoritmen: RSA, DSA/DSS
- Symmetrische versleutelingsalgoritmen: AES, RC4, 3DES
- HASH-algoritme: MD5, SHA1, SHA256
Hieronder wordt het asymmetrische encryptie-algoritme gebruikt om het gegenereerde wachtwoord tijdens het handshake-proces te versleutelen, het symmetrische encryptie-algoritme om de echt verzonden data te versleutelen, en het HASH-algoritme om de integriteit van de data te verifiëren. Omdat het door de browser gegenereerde wachtwoord de sleutel is tot de encryptie van de volledige data, wordt het tijdens de overdracht versleuteld met een asymmetrisch encryptie-algoritme. Het asymmetrische encryptie-algoritme genereert publieke en privésleutels, publieke sleutels kunnen alleen worden gebruikt om data te versleutelen, dus ze kunnen naar wens worden verzonden, en de privésleutels van de website worden gebruikt om de data te ontsleutelen, dus de website bewaart haar privésleutel zeer zorgvuldig om lekken te voorkomen. Elke fout tijdens het TLS-handshakeproces kan de versleutelde verbinding verbreken, waardoor de overdracht van privé-informatie wordt verhinderd. Juist omdat HTTPS zeer veilig is, kunnen aanvallers geen plek vinden om te beginnen, dus gebruiken ze valse certificaten om clients te misleiden om platte tekstinformatie te verkrijgen, maar deze methoden kunnen worden geïdentificeerd, waar ik in een volgend artikel over zal praten. In 2010 ontdekten beveiligingsexperts echter een kwetsbaarheid in de omgang met het TLS 1.0-protocol: http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/ deze aanvalsmethode genaamd BEAST werd al in 2002 door beveiligingsexperts ontdekt, maar deze werd niet openbaar gemaakt. Microsoft en Google hebben deze kwetsbaarheid opgelost. Zie: http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 De vereenvoudigde versie van HTTPS werkt ook in symmetrische encryptie versus asymmetrische encryptie. |