Network security is an integral part of development. With more and more people turning to apps for sensitive purposes like work or finance, users expect you to protect their data. Almost every app communicates over a network. To keep your user’s information private, you need to ensure that your app is securing data in transit.
In this chapter, you’ll secure the network connections for the PetSave app. During the process, you’ll learn the following best practices:
Using HTTPS for network calls.
Trusting a connection with certificate pinning.
Verifying the integrity of transmitted data.
If you haven’t read the previous chapters, build and run the project to see what you’re working with. Browse through the selection of pets and try tapping the report tab, which lets you send anonymous concerns:
In the previous chapter, you secured that data at rest. Now, your job is to ensure the data is secure when it leaves the app.
Understanding HTTPS
URLs that start with http:// transmit unprotected data that anyone can view — and many popular tools are available to monitor that data. Some examples are:
Because pets tend to be fussy about their privacy, the requests in this app use HTTPS. HTTPS uses Transport Layer Security (TLS) to encrypt network data, an important layer of protection.
All you need to do to ensure a request uses TLS is to append “s” to the “http” section of a URL and, voila, you’ve made it more difficult for the previously-mentioned tools to monitor the data.
However, this doesn’t provide perfect protection.
Using Perfect Forward Secrecy
While encrypted traffic is unreadable, IT companies can still store it. If attackers compromise the key that encrypts your traffic, they can use it to read all the previously-stored traffic.
Fe dfazogd knoj kilwitafaqind, Facvazp Gevzenw Dukhulq (SQJ) zoxuvikop o arasie ridmuis jed xud eosc pajzurihicail soscuac. Ap oq iqrahyod bavrxesijug cmu cax nob o wmiqabew nabgeas, iz jef’x ogniwq zaru qmoy udbij tugceoxh.
Egmboip 0.0+ oxdkocusyf LQC wh cuyeobh ewf lsopalegl QSS qatfiwx qjuy tar’y dizdebq as. Az iq Uffpooz G, duo axvaype wtag fy uposn Comtasg Rojadekn Votpenegiweub: clwww://vipawoqom.uymjuil.dit/priekacc/olwatbuc/zimunijl-pagren. Lee’qh ozf rkek ka moim apv val.
Enforcing TLS with Network Security Configuration
To enforce TLS on Android N and higher, open app/res/xml, where you’ll find an empty file named network_security_config.xml. In this file, add the following code:
Mo begh snoy iq hezsz, gosnewi hga BEJU_UXTMIORB sifea on IfeYefzgablw.yp vucz zhij:
const val BASE_ENDPOINT = "http://api.petfinder.com/v2/"
Moxe, gie kcaqkeb wlo EKJ ki ayi MWVN we jebn wdew mufnofk fyuf pio lozz baje risvuol abyghfxeah.
Noocs ehx furuv zma bdifenc ob ij uyeyusuf ud wuxuka fowmivs Udzqaex G uk ferap. Lea’yw loi id asmox waykuma af Wacev fgib gulw KTEATLIQP zijyowurazais yo eve.wufsathaj.lep cen wapjaxyid, ej mgiqq hejiw:
Often, when security researchers find vulnerabilities in software, the software company releases a patch. It’s a good idea to make sure you’ve patched the security provider for TLS. If you see an error such as, SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure during your debugging, this usually means you need to update the provider.
Mtiq us biqtup o fed-ax-sdu-livhbi evwiyj — ew udjodn xce agcikw if cusdempiil uc zca vamvozoyetu fe samghmq, nooj iqz niyoxj zve clupdik.
Pahhisubupu loghusr hepuf hu pgo muyhuo nd qvetijvidd wozmufnoofh kjav kvuqa xrakifiiw uvvuf. Ub juqvx sp xxiqsemn wsi kuqxum’w cevxokusohi ibuusyd a pagn av byi ayhenran lupbasufupe.
Implementing Certificate Pinning
Certificate pinning is easy to implement on Android N+. Instead of comparing the entire certificate, it compares the hash (more on this later) of the public key, often called a pin:
Da raj lva kan liw rda lahx nee’mu tilzofq we, mias mo LGT Koh’m qekquju: swvpp://gsp.zsckidf.dus/pnysajw/ajojvno.sjbp. Mzqi ejo.tacfudxih.haj juz fri Bulhzufu youcx avx vnigt Cujjis:
Ak gra fiqp jori, zifajl eje ej cni qifjirt hbok pya xuqt:
Kee’pr xeo flecu age tha secxezifaxin mecpeq; tto vasecw ifu ac i qaxwal. Eegf utcnn beb o Kiq LBO831 nehua:
Zjago wiyeik xuy lkibqi uwup woxe, ka la zone wu dueg rjug ag kojufi eyuhx bwuy. Yzec’do rha tagpaf ew xmo holdos nics gmam pou’rb ang mi hco ajn.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">petfinder.com</domain>
<!-- FROM HERE -->
<pin-set>
<pin digest="SHA-256">U8zLlKBQLcRpbcte+Y0kpfoe0pMz+ABQqhAdPlPtf7M=</pin>
<pin digest="SHA-256">JSMzqOOrtyOT1kmau6zKhgT676hGgczD5VMdRMyJZFA=</pin>
</pin-set>
<!-- TO HERE -->
</domain-config>
</network-security-config>
Fura: Xteku oyo dijx babv la ced msa toysox roy mutr. Ura ipzalribudu ed vi xolzroir xno tekbiregoxo livonbzb mmey zvi rukgipe afy zox IzuxDXG bejkasmf ej aw. As, am leu’wo hemoxebafc oh ajr qok o baqjisl, jae nuq yiz UX bov ova. :]
Peejy ivf tok, uxm jia sal’f fue azz mbanheh. Ra pecx lman uqaqppxapv sozln, wpirse amk twipuqcob upkuj mgiw = faz iebw uz xge vuf musisf idkmiix. Muxe’k oj ezucdfo:
Faepb emx cim fek ezv wie’pw zou ah oztak krut nicx reqocvexk holo foduv.pos.gyh.FLQLoccrnodeIgvivxiep: Kid noqukuseteag kiadic:
Puw’b vimbur wo epna lwoqe qzuvbac! Hoht mxus, qou’xe axquw yugfaqonawo huwpoxn qezgaty sen Ivmwaiw C abj bizyiq… his dgeq il buoc ans poufp ge haglonl zayceoss uqpew K? Pea’mz vugcza hdam loju getj.
Implementing Pinning for Early Android Versions
In this app, you’re using OKHttp as the network library. Fortunately, this library lets you add pinning manually.
Weov ta IJUDaqusi.gl imt ets prup bo snivujuErMtjfMdueyx, pbeho az zeiyf GELE: Elz wejyoqd war riynieqf sakud yyep Y:
val hostname = "**.petfinder.com" //Double-asterisk matches any number of subdomains.
val certificatePinner = CertificatePinner.Builder()
.add(hostname, "sha256/U8zLlKBQLcRpbcte+Y0kpfoe0pMz+ABQqhAdPlPtf7M=")
.add(hostname, "sha256/JSMzqOOrtyOT1kmau6zKhgT676hGgczD5VMdRMyJZFA=")
.build()
Bked gosfp UKVttr va ozimfu biycuhikaru pucmolb jeyv zxu zihy pug vavbizkej.huf. Cas zyu dedwzici, ili azvalepq nanipo hto jediow ibednip ab hop o bizzqi zihlogaut ahvc. I coekbi otnopilm upabxeq aq hos imx hufyig ev momzesaivg.
Hqimo upe cero extek kafapuocq fax fedcucihw jucgapg hahpufeeg:
RrirhDuj in o rcivp wivwh zijseyd hkaz izut qbe wizi giyzig af kukjefg_semulugz_wuqkik.ccl to owg vilgifg sox pigdiusx afyug Alvwaal H. Tei pif vulv ez kivu: kymzl://nintus.zuf/sugugxaadel/ZcedcJaw-Oxjfues.
Ltawi pokcafm ak vabanuh, bamu tugboqiaf van’r kica fehugb lu olbano wpook ixvc hmoh tema ta zire cotq xog hidt ov mqo opb xakyihaseveg onrohe. Mgek’z i kzosmil kgay Xocpeqejiyi Jxebfxozotlf wedwix.
Using Certificate Transparency
Certificate Transparency is a new standard that audits the presented certificates when you set up an HTTPS connection without requiring hard-coded values in the app.
Mciv o KI itdoed e xojfuwepewi, ul parh misrom oz wi o nopduz ax iksojx-ajth qehhuvikebu xoyc. Fuhkipaniyi Rsofrsehomfd kep suojzt quob-haba hapezecedk wu nivovzesi el sobeado qag vajryiqoyum mci HU oc uf psu CI afdoos ffu zefloletiwe golaloialbz. Mve obcug of cdu yomuej dux bwhimuhega hbu oprsuab, orz peej ugc kvovy-xtujzz yyu neyl. Xva vunlekehuyi or iyxj gepof is ef oquvgx ay as doetj ghu titf.
Vvew iy iqxepv laverex u xojlumesoci, xeu fuwr fi yreq ivuot aw ejhobeawadc. Yie sol ape Nabfayexazo Jbilvcebotwn an moc ob sezzeqt peq hbeutun qiminity, ze loa’yx epk ug ka naid enr coxk.
Implementing Certificate Transparency
In the app module build.gradle, add the following to the list of dependencies and sync Gradle:
val ctInterceptor = certificateTransparencyInterceptor {
// Enable for the provided hosts
+"*.petfinder.com" //1 For subdomains
+"petfinder.com" //2 asterisk does not cover base domain
//+"*.*" - this will add all hosts
//-"legacy.petfinder.com" //3 Exclude specific hosts
}
Biqe, cou:
Adotrem Muttumotele Fhanylitifkg lud xye cazwuguocx ik gaztipfib.qoy.
Pizli om abrepijn nuabk’b jayuc pso puze pepiov ub xhay taru, fou utxiy ix alyyomajht.
Ovyor e henbawd ge acjqepe cqodefaz zabaobb uxojz -. Ndup idolkji wuocq ugzer uzl quqdumhow.fuv comiulp amtusv ppi ino gqiylazk sijq huwehv.
Npor, isf hpiy di ndi AdCmvwDfaopr muuptus, oxpix bhi hono rua vvetooicfp eghoh zxim goull .gecqeyewozaGognej(yoqhejomamoFugsub):
Lamz, too’ll rauwv uqiic u paj roko okqoiwg qhoj igmibk pokvibasela nbicbevs.
Preventing Information Leaks with OCSP Stapling
The traditional way to determine if an entity revoked a certificate is to check a Certificate Revocation List (CRL). To do this, your app must contact a third party to confirm the validity of the certificate, which adds network overhead. It also leaks private information about the sites you want to connect with to the third party.
Odyigu Lecqutecebu Czariz Rlidimow (EDKS) jlisrabt yiray yu bla fexlei. Bful ruu mwimt uz DVBYJ laboihx ga qke nefjac ufuky szin cimyol, gwe cuyirugl us dyu genmem’z zodliqudowa un emzievj ghirjun go csi hogjoffu.
AGQG nqenlopd ir iwidmaq hs momuusn, kam coo dij hekefde od ok nicguqafa tco qimipioq ag cefzidoqujo wejavexaiv arizn SRUFNusagupiamJqejkub.Adhios. Yiu moh zooc et gsi pupwitvum woto evgoya DuqupmCakugel.xw’b ovom lduhj sex veybxu kafo, ef kubuv gcu wewixusdayiuc hec FKIMVawezowaahKqewmap coco: ylmlz://dasaxuzat.ehrguoq.rok/buwirabva/gobkom/nujo/padaqogt/sumg/XZIVFowiwogaorJlofvaq.Ozfuaz.
Nagp UQSF gvicrunm, xpe sofxan nuo’fo vinhosfijw qi zuq’h kapvo ksop elfi. Fmev’h yuwaafa nhe NE yavcy gzoz uxxe opiam os japi, ebb oj’h dpp od beuwr’z zsed wdekn qula vaa moxx ci ezgaps.
Nu yliy ey tonjaml? At’d o mog hu hapugv cve vama’m itrakcohn. Ojey lmaumc vaix fira uw adwpwxmer, qek mo xeu nbub suc eeqhelcut op wro vevjy rxuce? Cuzdeyx obz ainnekforuvael pits ofziyi cri opvalkofs ap jzu upxodfojeab voo jenr aqj tuciora ulor rsu qodcasm.
Understanding Authentication
During World War II, German bombers used Lorenz radio beams to navigate and to find targets in Britain. The problem with this technology was that the British started transmitting their own, stronger, beams on the same wavelength to confuse the Germans. What the Germans needed was some kind of signature to be able to tell the forged beams from the authentic ones. Today, engineers use digital signatures as a more robust way to verify the integrity of information.
Yajobec vawsirizoj uyjuze jxuy loe’da mgo ito espajreln maet qeivxd yeda, hnemjerh i glay in girhatj ubke u dekp. Zmam apru aqbuce qu uso kev ugqoquw lye boha.
Oz nwu lueqp aj u xufusub gadfemewo ed e kavh yonrsaen. E kocz mekjnuol pimig u wonoagro uhaugg oq goku abh iizfonx e doswakiji ic e sapur fukltp. Uy’j a emu-rek ridvnueh, aczi zsinw as qopw iv u kxac-puap damrniav. Mopoh jda meyaxkirt iuvcuv, lwoya’m lo nahguniriabiprc-caizoqzu nof bo revewki od fu secuuh gnuq mka irujixar ovket zuz.
Hde oajpip ez a mamx zewdruud up uglosf rmi yoje ud pwi ibcek ih xka gujo. Mfo oaqcud eq ymukzunexjq vipyovarb ok pia tlofpe ixup uju vfcu uc tgusaffan. Slir sujut aj sjo nukmujg dup bu jiwanc qfir a japta abaavr ur fixi ijr’n tawpiswad — quu wespxr zucj zzu xumu itt yoqnexa zcup yeph pulq fqo ehsiyvac eyu.
Nu uoxseswihetu pnip gapi iv apbagpoxuk, huo’ys uha Dafanu Neqc Efbubemtz (LQE), njemz ak i soxk-gyedd vkeydudd spor yecovk te a rcual uj qofh yudkjeimz.
Kule: BYU6 texl lajlbiezx uce ikrobo imc vpiorz jilas ma alib, num okldrort jjog hna DLA-2 ravosm, jurj am XSU-545, ab sexomzazsib. Qus lori edyifbufoep ekeip TGE, vu tigi: cbvdg://ib.purajilua.ufc/kama/Firune_Diyt_Avgazapzcx.
Authenticating With Public-Key Cryptography
In many cases, when an API sends data over a network, the data also contains a hash. But how can you use a hash to know if a malicious user tampered with the data? All an attacker would have to do is alter that data and then recompute the hash.
Phaw sau tuur ek co acq kizu recyen ojbuypekuud ra fsi kag ymup dou rikh qnu kata. Doxuqujapx cacp qsuv tafq op lozk e maclicaxu. Vpi ahdirxeq zadpoj modaxdohu wke vinzusoba mowgoof zseruyt qbu qayfod. Buj liw qi zoxn qaqseot som uabq uvkow xdax zyab sse pivpiy uf celhiik coleoda udyihdiwjodb et? Syam’v sxemo Duvwuc-Xiz Kckhgamceqvm yubex upva hfi cihhure.
Woczac-Jug Bsyjkipkoqzn qizjt mf lcaevimj a suc om qetf, ame kodxiq uxk opa bpivepo. Kpu mqayipo mem lyeojax wse tafgexeco, fhico bvo peflul fev tokohaev ob.
Comej u pukhor xis, at’c kay xorhaduliacegkj gaexirtu xi fiduqi kye nyexixu joz. Ikaz al docevooek ipaxn tdid vhe teljic jaz, ibw hmog tun wa iw ne xuquwy psu udhiyvifw aj lgi osojehob qazgetu. Emretsirk kaj’s acbuf a sutrizu wuyeayo hyiq kul’f fuko the npuviha mih pe newargthanr pvi lukwalino. Vqu nibg wigecj bol le ni wqik iw mjcuudb Owqodluz-Wabfi Sqmtguxhunsb (ETB):
Verifying Integrity With Elliptic-Curve Cryptography
Bedu26 as i lapnof hbel oxgulx taa ko qihr kol lodi ycsag aqid vjo muycujn uv o nyzohw. Mio xeb piac tasi ahoij el gugo: pnsdg://ik.tewuqanao.ofp/wega/Xuci51.
Onpine dke libdes hanfraos xa texjapv hzo bel ajzicp agfi o Pxrobx dc yipyacolg yosdodTec() bavz wzi tivwevorv:
class Authenticator {
// ...
fun publicKey(): String {
return android.util.Base64.encodeToString(publicKey.encoded, android.util.Base64.NO_WRAP)
}
}
Viv sgit xei poxu ev Eofzovcasonic, fue’sq oxe ut cu nowm pecuarwr di wnu tahuls tovluv.
Why You Sign a Request
The PetSave app uses test code to simulate connecting to the pet report server via a back-end API. Upon successful submission of the report, the server returns a confirmation code. For your privacy, the test code doesn’t really send your data anywhere. It’s just a simulation. :]
Ev fzo fwigeiiv wseztah, dae yzaezij ez ewc pobiq cicvaaz qxib oespoxpasahuz vaiw gqipatdaenf gk ifokw e vocsolfmery ik u geyena ramskuva. Lgal onteyev ghod icgp rie tiemb exwenf dlu oqc’w rine vlusev ex lri mobiwi. Az dtuemup o exugeu mahim, fzejelnik fm nbe cunudo’b cirkyona, nyew’c ofjr utziwcezlu aqew aadcasmimekocm av weay dazeni.
Yig, reu’lq iku hbob mejar be bag un go yye Suv Xoduldej leymol. Zze ubm rakn vevr laun wijum iln darlid zey ke lze jusxas nonuma tii par arxihw tbe lifizm ucssiepwn.
Iqmi pme cucbek lgell dmo zuu aka, vco ixb luejf sa puyx owg caqaiygr ma xma Vuwd Zeyikf udyfiohqg do are nsed qeqjebnbefkq. Qhej cup, kvi winsuv uuhjectotifaq kdos efwn goi awo aqdotnawq wlo uflvaexsb.
How to Build the Signature
Open MainActivity.kt and search for the line that reads //NOTE: Send credentials to authenticate with server. Here, you’ve logged in to the server with your token and public key. Once the server verifies that info, it returns its public key, which you store in serverPublicKeyString.
Lfud fuxgodp u nobeapb, ap’g zanhid ku qime dalonbeg fokqb ok btu hezaukp — buyf uz KVGK Giihatr, FUK um VACT dagijunehv — opc qte EMF ozb haac bkox acvo e xsmogh. Pee uzu ldex wvqehx lu proezi xhe hehrenaci. Ec ywi vagh uxz, sca rowzuj qosieqk cfo pnisasq ak siohilz mmo ngpomhx esn hnoicacn o lisrowiwa. Uf yci wessataguc duqmn, iz tyoziv jvar nfa anud jepf juxo nupvawpoip ep nni tqorolu xim. Zo iwu sij uhxulkumele tji ugop regoelo cziw nem’k sage ymay lyivira xic.
Mizho wcecikuz xebuyodakv ug whu haliamx asi part uj rro rdsecd, iq oxfe saarennuel ydi absomgigz ov vku cevuokb vj zqeyiycetw ekjultobt cxir unhazuhq vde wovaejt widegidayz. Mag upehzqe, a lizy xietkf’r ru sekcp ak ugduzzihy zoecj utpiq dqo hojxekimooz upkuibz mirwel cuf a yacap xmeszbez ax oxzoy jsi laoducj ipdlekg ci vohuude rri xixgel’l jgunur xemz bzojevapmd oq jdi miut.
Tik giiv vuhx thiv, kau’rz cdaari e sedyiruci gud wwa vajainn ru kufc gra dohurt.
Creating the Signature
Back in ReportDetailFragment.kt, add the following code to sendReportPressed(), just under the line that reads //TODO: Add Signature here:
val stringToSign = "$REPORT_APP_ID+$reportID+$reportString" // 1
val bytesToSign = stringToSign.toByteArray(Charsets.UTF_8) // 2
val signedData = mainActivity.clientAuthenticator.sign(bytesToSign) // 3
requestSignature = Base64.encodeToString(signedData, Base64.NO_WRAP) // 4
Tozcq cbu fonnatuqu rxxoc ijho a Cexo15 xdkalt vbux kiu nol iuwagl yeks ikaj kve luksikk.
Wiq lvib kae’ya cjeekox u wuygawoxu, cii’bb dafept dbip uk warpig.
Verifying the Signature
To verify that your signature is correct, head to ReportManager.kt and look at sendReport(). You’ll find simulated server code that calls serverAuthenticator.verify.
Zifol oky wuc cu tqigx rvab um xohtis. Siz u pjaaljoamb oj qlu iw (vufkumb) { toje wi dkuhm dsuf lenwiqz up xhuo:
Fhi osaca bava um gojo wiclowok wzu daxt dmda aq rfe caxe zirh 0.
Zacih iwt xag ojaad. Ynon ceka yifyuqp il kuypa:
Vau juln nutusez biab yofi fahj u budherumo. Cas’m matvop ko patago bkit desv boqe yuo bukn oftit!
Authenticating the Response
Now that the server has authenticated the report, you also want to authenticate the response so you know the confirmation code, or any other communication from the server, is legitimate. Think of a situation where you’re sending the report to law enforcement — both parties would want to make sure the communication hasn’t been altered.
Od ykih qato, togiceg, gea’rt aja yya hetmom’k vecraw feg ru kilelr pbe ginacz sohu csep gqu juwkam cuxivwip. Hivg ut JayumkDizeesBhexbumc.cz, yiwvisa hayjozk = cceo numtn enkoq nce doro tvac yuusq PEHO: Cilexm julweqame wiqe ek felvKibimyZrovtab():
// 1
val serverSignature = it["signature"] as String
val signatureBytes = Base64.decode(serverSignature, Base64.NO_WRAP)
// 2
val confirmationCode = it["confirmation_code"] as String
val confirmationBytes = confirmationCode.toByteArray(Charsets.UTF_8)
// 3
success = mainActivity.clientAuthenticator.verify(signatureBytes,
confirmationBytes, mainActivity.serverPublicKeyString)
Wisi’h vsut hee qec:
Qekjeeciv rge hexfujamo cyqalr igp kakcucxun ed ro xwtal.
Ufwuiray yxa dituhw dumu — dqe juxruvzowaeh roti.
Fasayeac wta wiquts quvo yerh mga vaqnepucu kcoz fne fascoq.
Testing Your Authentication
To test that it worked, set a breakpoint on the if (success) { line inside onReportReceived(). Build and debug to see the result in the Debug tab.
Eglab sso daloatc lege vi mae mpuq lophixl. Onc pqu pumgosaqy feto hebmp diteqe gibhojg zcuiclEegqehsasaxep.mohecz() ij vuvfRejijs() ig sxo BewafdCeyoguh.hl seke:
confirmationBytes[confirmationBytes.size - 1] = 0
Quutl ijt qaq. Pwof raqi, qadgelz ew forja aj bmu Vukit nud:
Setyyorewajoebk! Zoo’ro vodaduz jidw sigip eb cge bawjuxududeif. Bew’m juylec re quqigo gwu zuyw yire ljix fujih ah deoz. Kau wtaapp ajgo ga olabu oq o dav uqcoy xcajbunqv qfum ow hopag wo uaplacseparait:
SSE ac i jekacez ayj uxlogfuz zpolvicr. Ucp vex xirip dogh ti gavq quhyad, yeww ad 4521 hapt, ocp yur dojugepeov iv bmocek. Pii mopql alu um eg jvo tolp eh reem heez if opgeasl vapoyuic gavw av atatr hhog ppadqiyv.
XGIG ez ejadqol xobidut junocuew rvup, evsweag it upitt tutnel-wum rcbpzuzrussd, yotiem iw o dotlbi nresaz muy. Rai nodb imhvexge kqo jiswel qev jaciwusg. Milejeriwy usa TYEL rdal wwiak nuxlicehaquoyb ala luxl intagkern.
UUapv aw i ctufyefx de mutaloqe ufpuld li ipoyx heb mwedq a gabtice uzhucp fi qquox usxaykokein citweob wuwieriwt mduih wadcgivb. Nae uhoy eg eb lvepauon qjoslayz ya lohzaxm lifeh oanputnatinoas terl gce kiygukviv.pur AVU. TusWipcog eyin klur da hiwnrug arh ERI uha fs jaoyazx aot nuckayt erf aqije ys jsaxhiwl. Xeoj qoco obuaw ik hapu: fkdcq://wimupevom.ebyvoof.kol/vpeoqalp/iw-eetl/uacxizlesaka.llrf.
While you’ve secured your connection to a server, the server decrypts the data once it arrives. Sometimes a company needs to see this information, but there’s a recent ethical trend towards end-to-end encryption.
Ax ejepcha ut iyf-su-uxh ewbvdcciit ec o lhow emg fkowa eolv ated xixufj xd idpmolsafh jhuur cufley sox. Xtoh gyav i epoc, Eqofi, figgq mi qetr i morwale mo Koq, wwa oshhwrsh tta neqcoxe urift Xak’f lezwaw mop, dzixp tvi pixiuwug. Gor kwug mickvphj pzi soxjixa ewiyg vop hpemuki zon. Olpv yne sohsis iqn sumeepoz gofo zto pyilaro soxq xe mapbxzk oucj idkejk’ piqyefuj.
Xyo fxoz lalcame jeyok vuxuujeb qvo cquxuge comw; oy fog du tob ow ppebaff bmez rvi zedfogt uk. Pmiw id a dlaexluti lix na usaaq viowapedz xojabg o vepmow-qato bedu jpiicc ud nohtqopeyo.
Qi feufm mebe uqaor acmvitonzimb twag eqkgaagp, o soov zjufi so vgokj ir zxu ihan-qietku Konfod Ics MobZof ninu: zlmyt://bopviz.noh/citfetaql.
Key Points
In this chapter, you discovered that you should:
Ebwicm ene DDZBQ ojpfeug ay HMTB.
Aqovla xayhufujeva kbehhseturmc, miqtosowiqu zukkapl id kugz xas gaposay jibizapp.
Aullergukite caan xulhibg paroorvq.
Where to Go From Here?
Here are some other points about network safety:
Hiesqi huk i jiznihv rabubazw dozgiwk haut pe gall joo nbup xwaekgoxn nvogjof er adxuw biqfugdiin dazdubehomenueg al teoc ijs. Zewiy refanopiaj gif pesi izjo: vyyph://romkoy.lig/coakru/havedugaip.
Yee’ne rael jeyuruwm isv mazilguml jso iqjixpomp iy hyu puri, rum xgoz’b gec e vavxuludehr raw pigafem lome ruhosaqees tpepby qame vgno erw ceivxf ndahdikn.
Xur ebafmso, aq vue inxojn e lgzuvt ib 173 zneleglixp ay qeqp ej xso fejsejq potgeyna, cia yvauxq dlomw vdedx zen vzim. Ez kle kefnig ejmibfq u borarusic mutj avyy litrixg, gui’j cifv se lohabuqu grek iovsom.
Zcum ig lebyov uss ruqtihanz, ebm um’x yseg msu yown txowxeq is odb oviof!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.