scieee AI-readable full text Open interactive document viewer

Establecimiento de claves y autenticación mediante la utilización de códigos sonoros en entornos móviles

Ruiz Tueros, Ricardo

Abstract

Este proyecto tiene como objetivo investigar la posibilidad de realizar un intercambio de claves y autenticar a dos dispositivos utilizando como medio el canal sonoro. Investigaremos a nivel teórico la posibilidad de incluir información en un sonido orientado al intercambio de claves, teniendo en cuenta factores como la necesidad de sincronizar los sonidos, la escucha de los dispositivos, la longitud de la clave que podemos alcanzar, los ataques a los que serían vulnerable el protocolo, la necesidad de hacer persistente cierta información a nivel local... Tras plantear a nivel teórico una posible solución investigaremos diversas tecnologías actuales que puedan soportarla, analizándolas y comparándolas entre ellas trataremos, en última instancia, de elaborar un prototipo que sea capaz de autenticar a varios dispositivos (al menos a dos) y realizar un intercambio de claves entre ellos, creando así un canal seguro a través del cual puedan comunicarse sin necesidad de que una tercera parte confiable pueda manejar información criptográfica sensible.

Full text

 RicardoRuizTueros                              1  RicardoRuizTueros                              2  RicardoRuizTueros ESCUELATÉCNICASUPERIORDEINGENIERÍA INFORMÁTICA  INGENIERÍADESOFTWARE  ESTABLECIMIENTODECLAVESYAUTENTICACIÓN MEDIANTELAUTILIZACIÓNDECÓDIGOS SONOROSENENTORNOSMÓVILES  KEYAGREEMENTANDDEVICESAUTHENTICATION OVERSOUNDCODES  Realizadopor RICARDORUIZTUEROS  Tutorizadopor ISAACAGUDORUIZ  Departamento LENGUAJESYCIENCIASDELACOMPUTACIÓN UNIVERSIDADDEMÁLAGA  MÁLAGA,JUNIODE2016   Fechadefensa: ElSecretariodelTribunal  3  RicardoRuizTueros                        4  RicardoRuizTueros Resumen Esteproyectotienecomoobjetivoinvestigarlaposibilidadderealizarun intercambiodeclavesyautenticaradosdispositivosutilizandocomomedioel canalsonoro.Investigaremosanivelteóricolaposibilidaddeincluirinformación enunsonidoorientadoalintercambiodeclaves,teniendoencuentafactores comolanecesidaddesincronizarlossonidos,laescuchadelosdispositivos,la longituddelaclavequepodemosalcanzar,losataquesalosqueserían vulnerableelprotocolo,lanecesidaddehacerpersistenteciertainformacióna nivellocal... Trasplantearanivelteóricounaposiblesolucióninvestigaremosdiversas tecnologíasactualesquepuedansoportarla,analizándolasycomparándolas entreellastrataremos,enúltimainstancia,deelaborarunprototipoquesea capazdeautenticaravariosdispositivos(almenosados)yrealizarun intercambiodeclavesentreellos,creandoasíuncanalseguroatravésdelcual puedancomunicarsesinnecesidaddequeunaterceraparteconfiablepueda manejarinformacióncriptográficasensible.  Palabrasclave:Investigación,Sonido,Intercambiodeclaves,Autenticación, Seguridad,Terceraparteconfiable,Prototipo.  Thisprojecthasasachievementtoinvestigatethepossibilityofmakingakey agreementandauthenticatetwodevicesusingthesoundmedia.Wewill researchatatheoreticallevelthepossibilityofincludinginformationinasound wave,beingawareofdifferentfactsastheneedofsynchronizethesoundsand listensstatesofthedevices,thekeylengthwecanreach,theattackswhich couldvulnerateourprotocol,thenecessityofpersistsomedatalocally… Afterstatingatheoreticalsolutionwewillinvestigatedifferentcurrent technologiesthatcouldhelpusachieveit,wewillanalyzeandcomparethe solutionstryingtoelaborateaprototypewhichwouldbeabletoauthenticate severaldevices(atleasttwoofthem)andmakeakeyagreementbetweenthem, makingasafechannelovertheycancommunicatewithoutatrustedthirdparty thatcanmanipulatethecryptographiccriticaldata.  Keywords:Research,Sound,KeyAgreement,Authentication,Security, TrustedThirdParty,Prototype..  5  RicardoRuizTueros                  6  RicardoRuizTueros Índice  1.Ámbitodelproyecto 910  2.Estudiodesolucionesytecnologíaactual 1114  3.Solucionespropuestas 1519  4.Tecnologíasutilizadas 2036  5.Prototipo:Chatchat 3746  6.Conclusionesymejorassobreelproyecto 47  7.Referenciasbibliográficas 4849        7  RicardoRuizTueros                       8  RicardoRuizTueros Establecimientodeclavesyautenticaciónmediantela utilizacióndecódigossonorosenentornosmóviles  1. Ámbitodelproyecto  Esteproyectopretendeabordarlaproblemáticadelestablecimientodeclaves yautenticaciónentredosdispositivosdeformaseguraparapoderestablecerun canaldecomunicaciónentreellos.  Enlaactualidadseutilizanunaseriedeprotocolossegurospararealizareste intercambiodeclaves,comopuedeserelconocidoDiffieHellman  ,sinembargo, nuestrapropuestaeslautilizacióndeuncanal“fueradebanda”  ,quenospermita realizarlaautenticacióndelosdispositivossinnecesidaddecertificadosydeuna “terceraparteconfiable”  comopudieraserunaAutoridadCertificadora(CA),sino entrelospropiosdispositivos.  Enestesentidohemosdecididoabordarelproblemadeformasimilaracomo se“autentican”  dospersonasenelmundoreal.Enprincipio,nohaynecesidaddeun certificadoquedigaquieneres,simplementerealizamosunreconocimientomutuo delotroindividuoconlainformaciónvisible.Estoesprecisamenteloquetratamos dealcanzar,unaautenticación“espontánea”  dedispositivospróximosmedianteel canalsonoro.  Lasiguientecuestiónlógicaquepodríamosplantearnoses:“¿Cómopodrían autenticarsedosdispositivos?”  ,lacomunicaciónentredispositivosdigitalesenla actualidadserealizaprácticamenteensutotalidadatravésdeInternet,peroeso implicaríalatransmisióndedatosaunservidor,aunaredenlaqueparticipan millonesdeusuariosyquepodríaseratacadademultituddeformas,necesitamos uncanaldecomunicaciónexclusivoentrelosdosdispositivos.  ¿QuizáBluetooth?,podríaserunasolución,sinembargotambiénexisten numerososataquesaestatecnología,elalcanceBluetoothpuedeserdevarios metrosconunaantenapequeña,pero,porejemplo,conunaantenadireccionalde grantamaño,podemosalcanzardistanciasdekilómetrosquedanmayorrangoal atacante.Ademásenmuchoscasossomosdependientesdelaplataforma(por ejemplo,nosepuedeemparejarundispositivoconAndroidconunoquetengaiOS).  9  RicardoRuizTueros Además,yaunqueloexplicaremosenelapartadosiguiente,podemos adelantarqueChirpsolonospermiteenviar80bytespormensajeentredispositivos sinpasarporsuservidor,locualreduceeltamañodenuestraclaveonosobligaa enviarlaenvariosmensajes,loquepuederesultartediosoparaelusuarioypuede llevaraproblemasdesincronización.  Figura4:Segundaiteracióndelprotocolo  Lasegundaaproximaciónqueplaneamosfueutilizarelprotocolo DiffieHellmaniniciadoconunacomunicaciónChirp.Deestaformapodríarealizarse laautenticacióndelprotocolomediantecódigossonorosconelhash  delaclave compartida,salvandoasílanecesidaddeuna“terceraparteconfiable”  ,seríasimilar alaautenticaciónmedianteloscódigosvisiblesdeTelegram 1 enambos dispositivos.    16  RicardoRuizTueros 1:TelegramMTProtoFAQ https://core.telegram.org/techfaq Sinembargo,aunqueesteesquemaesmásseguro,elprincipalproblemade estaesquesenecesitanenviaralmenostresmensajesconcódigossonoros,uno parainiciarlacomunicaciónconelIDydosmásparalaautenticaciónconelHMAC  Figura5:Terceraiteracióndelprotocolo  Laterceraaproximaciónfuedesarrollarnuestropropioprotocolobasándonos enlaprimeraidea,perotratandodesolucionareltamañodelaclaveylimitando algunosataquesquepodríanrealizarse,paraellohacemosusodelafunción PBKDF2  (PasswordBasedKeyDerivationFunction2[6])  quenospermitiráapartir delaclavecortaintercambiadaconChirpgenerarunaclavedemayorextensión dadauna“salt”. Paralageneracióndeesta“salt”  quedebeserlamismaenlosdos dispositivosutilizamosdosparámetros:  Horaactual:Enhorasyminutos,deestaformasabemosquela sincronizaciónseestállevandoacaboenuninstantedetiempo determinadoypodemosevitarquesegrabelaclaveyseutilicecon posterioridad,loqueseconocencomo“ReplayAttacks  1  ”.   1:ReplayAttacksincryptography  17  RicardoRuizTueros http://www2.imm.dtu.dk/~fnie/Papers/GBDN07.pdf   RedesWiFi:Ademásdelcódigosonoropodemoscomprobarque ambosdispositivosseencuentranpróximossirecibenlasmismas redesWiFi.ParaelloutilizamoselSSIDalgunasdelasredescon mayorseñal.Deestaformapodemosevitarlosconocidoscomo “WormholeAttacks  1  ”  enredesAdhoc,ademásdeañadirentropíaala clavegeneradaconPBKDF2.  Unavezcalculadalaclaveporambosdispositivosseprocedeaenviarla informaciónprivadadelusuario(nombreeimagen)cifradasasícomouncódigo HMACqueserviráparaautenticaralreceptoryconfirmarquelaclaveseha calculadocorrectamente. SielcódigoHMACescorrectoseprocedeaañadirlainformacióntransmitida comounnuevocontactoyestablecerunaIDparaelcanaldecomunicaciónconel mismo.Encasocontrariolainformaciónsedescartaynoserespondeconla informaciónpropiaalmensajerecibido. Lainformacióndeloscontactosañadidossealmacenadeformalocalenla aplicaciónynoesaccesibleporelservidor.LasIDssegeneranaleatoriamenteen cadacomunicación,porloquesealmacenanlasIDutilizadasporelemisoryel receptorenlasincronizaciónyseemplean(enunordendeterminado)para establecerlaIDdelcanaldecomunicaciónentreellos. Elobjetivodeestasincronizaciónesqueúnicamenteseenvíenalservidor dostiposdeinformación:IDsaleatoriasdecomunicaciónymensajescifrados. Deestaforma,aunquealguienpudieraatacaryobservarlainformacióndel servidornopodríaconocerelcontenidodelosmensajesenviados,nisiquierapodría identificarusuariosconcretos,yaqueencadacanaldecomunicaciónutilizanID distintos,garantizamosasínosololaconfidencialidaddelosmensajessinotambién laprivacidaddelosusuarios.        1:WormholeAttacksInWirelessSensorNetworks http://www.cs.uml.edu/~glchen/papers/wormholecipbook07.pdf  18  RicardoRuizTueros Sicomparamoslaentropíadelaclaveobtenida,elnúmerodemensajes enviadosatravésdelcanalsonoroylaposibilidaddeataquesderepetición obtenemoslasiguientetabla:   Entropía Númerodemensajes mediantecanalsonoro Susceptible AtaquesReplay Claveenclaro 80bytes 1 Si DiffieHellman Másde80bytes 3 No Protocolocon PBKDF2 80bytes+WiFi+ Fecha 1 No  Podemosobservarqueencuantoalosparámetrosconsideradosqueel protocolopropuestoesquemejorseajustaofreciendouncompromisoentrela entropíaqueescapazdeutilizarenlaclaveylacantidaddemensajesqueson necesariosenviaratravésdelcanalsonoro. Elprimerprotocolonosofreceunasoluciónsimplesinnecesidaddeenviar variosmensajesatravésdelcanalsonoroperoespocoseguroyaquees susceptibledeataquesderepeticiónysuúnicaentropíasonlos80bytesgenerados conChirp. ElsegundodeellosesunaextensióndelprotocoloDiffieHellman,nosofrece todassusventajasademásdeevitarlosataquesdeltipo“ManInTheMiddle” graciasalaautenticacióndelosusuariosmedianteelcanalsonoro.Seríala soluciónidealentérminosdeseguridadperolanecesidaddesincronizartres mensajessonoroslohacepocousableylento. Eltercerprotocolopropuestoesunamejorasobreelprimeroenelque, graciasalageneracióndeunaclaveconPBKDF2conunasalt  adecuada,podemos evitarloataquesderepeticiónyde“agujerodegusano”  ademásdeañadirentropía alapropiaclavemedianteelusodelasredesWiFicercanasylafechaactual. Mantienelausabilidaddelaprimeraversiónalnecesitarunúnicomensajeatravés delcanalsonoro.      19  RicardoRuizTueros 4. Tecnologíasutilizadas Enestepuntoseexplicaránlastecnologíasquesehandecididoutilizarenla elaboracióndelprototipo. LaplataformasobrelaquesedesarrollaelprototipoesiOS,estosedebe principalmenteaquelaprimeratecnologíaquetratamosdeutilizarfueAudio Modem  yelproyectodepruebaquetraíaesexclusivodeiOS.Ademásnospareció interesantedesarrollarparaestaplataformayaquenosevenadadeellaenla Universidadymitutormeinformódequecontabanconunperfildedesarrollo académicoacordadoentreAppleylaUniversidaddeMálagadelquepodíamos haceruso.  SoncuatrolastecnologíasyAPIsutilizadas,aunquenolaúnicasquehe investigado,yaquehemosevaluadootrasalternativascomoAudioModem  ,laAPI deTelegram  paraelenvíodemensajesoutilizarunservidorwebenlugarde Firebase. ElprincipalproblemadeAudioModem  comohemoscomentadoesqueno incluyeunSDKpropiamentedicho,sinosólounproyectodepruebaeniOSconun códigofuentebastantecrípticodelquenopudimosobtenerresultados. PorotrapartelaAPIdeTelegram  pareceunabuenasolución,peroaltratar deutilizarsuproyectoeniOShemostenidomuchosproblemasparafirmarelcódigo ydesplegarlaaplicaciónyaquenodisponemosuncertificadoaprobadopor Telegram  además,comoveremos,necesitamoscontrolardistintostiposde mensajesquepuedenrecibirlosusuariosennuestroprotocoloyelAPIdeTelegram nonosdacontroldirectosobreesto. Acontinuaciónseexponenlastecnologíasutilizadasexplicandobrevemente lapartedesuAPIquehemosempleadoenelprototipo:           20  RicardoRuizTueros Chirp Chirpesunatecnologíaquesebasaenlacomunicacióndeinformaciónentre dispositivosutilizandoelcanalsonoro. Paraelloempleanunaasociaciónunívocaentreunbyteyunadeterminada frecuencia,deformaqueelcarácter‘a’podríatenerasociadalafrecuenciade 500Hz,elcarácter‘b’lade510Hz…  DistinguendostiposdemensajesensuSDK: Los“shortcodes”  sonmensajesdeunmáximode80bytes,enviadosen formade10caracteresquenopasanporelservidordeChirpyqueseenvíana travésdelcanalsonorodeundispositivoaotrosiguiendolacodificaciónen frecuenciasanteriormenteexplicadas. Losmensajescondiccionario,porotraparte,sonestructurasdedatosmás complejasqueseenvíanconunaclave,estaclavees,precisamente,un“shortcode” delosanteriormentemencionados.Estosmensajescondiccionarioson,enúltima instancia,unaclavede10caracteresqueidentificaunmensajeenformatoJSON conlainformaciónestructurada. Losmensajescondiccionarioadiferenciadelosmensajes“shortcode”  si necesitansubirsealservidordeChirp.Ensufuncionamiento,elusuariofinalrecibe medianteelcanalsonoroun“shortcode”  queutilizacomo“token”  frentealservidor deChirpparaobtenerlaestructuradedatosenformatoJSON.  AcontinuacióncomentamosbrevementelasfuncionesqueChirpnosfacilita:   Figura6:FunciónsetAppKey  LafunciónsetAppKeyeslaprimeraquedebemosllamarparacomenzara utilizarelSDK(representadoporelobjetosdk),enellaintroduciremosnuestraclave  21  RicardoRuizTueros ysecreto(credencialessolicitadosaChirppersonalmente)paraautenticarnoscomo undesarrolladorregistradoensuservidor.   Figura7:FuncionesinitWithIdentifierychirp Lafunciónchirp  nospermiteenviarunshortcode  ounmensajedetipodiccionario medianteelcanalsonoro,paraelloesnecesariodarelmensaje(unstringparaelshortcode oundiccionarioparaelmensajecondiccionarios)alobjetosdkmediantelafunción initWithIdentifier  ,posteriormentebastaconllamaralafunciónchirp  enlaquesepuede especificarunbloquedecódigo“withCompletion”  queseallamadotraslaemisióndel sonido.  . Figura8:FuncionessetOfflineOnlyystartListening  Laprimeradeestasfunciones,setOffllineOnly,  nospermiteespecificaral objetosdk  quenorealizaremosningunacomunicaciónconelservidorenelenvíode mensajes,noesestrictamentenecesario,yaquesinoutilizamosningúndiccionario noseenviaráalservidor,peroesconvenientedesactivarestafuncionalidad.    22  RicardoRuizTueros LafunciónstartListening  activaelmicrófonodeldispositivoenmodoescucha alaesperaderecibirunshortcode  .Cuandoestoocurreseejecutaelbloquede códigoacontinuacióndelafunción,comoparámetrosincluyeelobjetoChirp recibido,quecontendráelshortcodeenviadoy,encasodeexistir,elobjetoJSON yaconvertidoaunaestructuradediccionario.   Además,duranteeldesarrollodelproyecto,Chirphapublicadounanueva versióndesuSDK(alaquehemosactualizado),incorporandounSDKnuevoen iOS:“iOSUIComponents”  . EstenuevoSDKnoincorporaningunafuncionalidadadicionalalaya explicada,peronospermiteincluirennuestroproyectoalgunosindicadoresdel estadodelatransmisióndelcódigosonoro. Ennuestrocaso,ycomoveremosenlascapturasdelprototipo,hemos decididoincluirunabarrainferiorenlaquesepuedeapreciarlaondasonora captadaporelmicrófonoentiemporeal,parpadeandoconuncolorverdecuandose recibecorrectamenteunshortkey. EstoselementosdeinterfazsedebenintegrarconelSDKyacomentado anteriormente,acontinuaciónexplicaremosbrevementecómohemosincluidoChirp ennuestroproyecto:  Figura9:CómoañadirelframeworkdeChirpalproyecto.  ParapoderintegrarelSDKdeChirpenelproyectoarrastramoselarchivo ChirpSDK.framework  alapartado“LinkedFrameworksandLibraries”  23  RicardoRuizTueros   Figura10:ComprobacióndelframeworkdeChirpenelproyecto.  Confirmamosqueelframework  sehaañadidocorrectamente,debiendo aparecerunacopiaenlajerarquíadelproyectoyreferenciadoenelapartado“Link BinaryWithLibraries”  cómo“Required”.               24  RicardoRuizTueros Firebase Firebase[7]esunatecnologíarelativamentenueva,que,duranteel desarrollodelprototipo,hasidocompradaporGoogle. AunqueahorahaintegradomuchosserviciosconGooglepodemosdefinir Firebaseensuiniciocomouna“BasededatosNoSQLonlinebasadaenJSON”. Enlaactualidadincorporagrancantidaddeserviciosadicionalesen colaboraciónconGooglecomoAnalytics,Autenticación,Almacenamientode ficheros,Hosting,MonetizacióndeaplicacionesmedianteGoogleAdmob.. .  Figura11:PáginaprincipaldeFirebase  ParaincorporarFirebaseennuestroproyectohemoshechousodelos “CocoaPods”[8]  . CocoaPods  esungestordedependenciasparaSwiftyObjectiveC,está hechoenRuby  eincluyemásde18.000libreríascomúnmenteutilizadasenel desarrollodeaplicacionesiOS. ParautilizarCocoaPodsennuestroproyectohemosdescargadolaaplicación CocoaPods  desupáginaweb,alincluirseRubydeformanativaenOSXno necesitamosningunainstalaciónniconfiguraciónprevia. Alabrirlaaplicaciónpodemosseleccionarunproyectodelalistade proyectosexistentesenXCode.   25  RicardoRuizTueros CryptoSwift CryptoSwift[9],talycomosunombresugiere,esunalibreríacriptográficaen ellenguajedeprogramaciónSwift(utilizadoconjuntamenteconobjectivecalolargo deldesarrollodelproyectoiOS). SetratadeunproyectodecódigoabiertoenGithubqueincluyelas operacionesbásicasdecriptografíaqueseutilizanactualmente,entreellas:Hash (MD5,SHA1..512),CRC,Cifrados(AES128..256,ChaCha20,Rabbit),HMAC (MD5,SHA1..256,Poly1305),Modosdebloques(ECB,CBC,CTR…), PasswordBasedKeyDerivationFunction  (PBKDF1y2)yPadding(PKCS#7). ParaincluirCryptoSwiftennuestroproyectohemoshechousode Cocoapods  ,bastaconespecificarestanuevalibreríacomoun“pod”  yactualizarlas libreríasexistentesdesdelaaplicación. Paralasaislarlasoperacionescriptográficasdelcontroldelaaplicación hemoscreadounaclasellamada“CustomCrypto”  quecontienelosmétodos necesariospararealizartodaslasoperacionescriptográficasconCryptoSwift ofreciendoelresultadoesperadoalcontroldelaaplicación. Acontinuaciónseexplicalaclase“CustomCrypto”   Figura20:Funcionesdecifradoydescifradodeinformacióndelusuario  LasfuncionesEncryptUserData  yDecryptUserData  cifranydescifran(en base64parasuposterioralmacenamiento)lainformacióndelusuarioquetoma comoparámetro.LainformacióndeusuarioaalmacenaresunID,unnombreysu imagendeperfil.  32  RicardoRuizTueros  Nótesequeparaobtenerelbloquecifradodedatosoparadescifrarlolos distintosatributosdelcontactoseseparanmedianteelcarácterespacio.  Figura20:Funcionesdecifradoydescifradodemensajes  Paracifrarydescifrarunmensajedetextobastaconrealizarunallamadaala funciónencrypt  odecrypt  deCryptoSwift  conlosparámetrosadecuados,el resultadodevueltoeselmensajecifradoodescifradoadecuadamente. Figura21:FunciónHMAC  LafunciónHMACTimed  esunafunciónespecíficaparalageneracióndel códigoHMACdelprotocolo,essencillamenteunafunciónHMACsobrelaclave generadaconPBKDF2quetomacomo“salt”  lahoraylasredesWiFi. Figura22:FuncióndegeneracióndelaclaveconPBKDF2  Adicionalmentecontamoscondosfuncionesauxiliaresutilizadasporlapropia clase.LaprimeradeellasesKeywithPKCS5  quenosdevuelveunaclavedemayor tamañocalculadaconlafunciónPBKDF2  utilizandocomofunciónhashSHA256.  33  RicardoRuizTueros  Figura23:Funcióndegeneracióndesubclave  Lasegunda,lafunciónSubKeynosdevuelveunaclavedeltamañoadecuado pararealizarlasoperacionesdecifradoconAES.   Figura24:Funcióndegeneracióndecadenaalfanuméricaaleatoria  PorúltimolafunciónGetRandomStringnosdevuelveunacadenade caracteresalfanuméricaaleatoriadelalongitudespecificadacomoparámetro.           34  RicardoRuizTueros JSQMessages JSQMessages[10]esunalibreríadegráficosycontrolquenospermitecrear deformasencillaloselementosbásicosyconundiseñoestandarizadodeuna ventanadechateniOS. Entreloselementosseincluyendiferentesburbujasconmensajes:texto, contenedorasdevideosoimagenes,localizacióngeográfica.Todoanivelde interfazdeusuario. Dadoquesetratadeunalibreríacomplejaylaelaboracióndeunchatessólo unaexcusaparaponerdemanifiestolasoluciónteóricapropuestahemoshechoun usoreducidodeestalibreríalimitándonosalacreacióndeventanasdechat, burbujasdemensajeseindicadoresde“escribiendo…”.  Acontinuaciónexplicaremoselusoquehemosdadodelalibrería JSQMessagesparalaelaboracióndenuestroprototipo:     Figura25:SubclasedeJSQMessagesViewController  Enprimerlugarlaclasedeventanadechatquevayaahacerusodela libreríadebeheredardelaclaseJSQMessagesViewController  Figura25:SobreescribiendolafuncióncollectionView      35  RicardoRuizTueros AcontinuaciónnecesitamossobreescribirelmétodocollectionView  dela clasepadreparaquecuandosedetecteunnuevomensajeleseaasignadauna burbujadechat,encolorazulsielIDdelremitentedelmensajecoincideconel nuestroyencolorblancoparaelcasocontrario(esunmensajedeotrousuario).                             36  RicardoRuizTueros 5. Prototipo:ChatChat  ComoaplicaciónprototipoparalautilizacióndelcanalsonoroconChirpe implementacióndelprotocolopropuestohemoselaboradounaaplicacióndechat paradispositivosiOS,quehemosdenominadoChatChat. Acontinuaciónexplicaremoselfuncionamientocompletodelaaplicaciónyla sincronizacióndedosdispositivosmediantecapturas: Enestaprimeracapturaseobservalaventanaprincipaldelaaplicación,en laquepodemosverelnombredelamismaytresbotones.  37  RicardoRuizTueros  Sipulsamossobreelbotón“General”  nosllevaráaunaventanadechat general.Enlaesquinaizquierdasuperiortenemosunbotónde“Back”  conelque podemosvolveralavistaprincipal. Laventanadechatgeneralmuestraenburbujaslosmensajesenviadosal “ChatGeneral”deFirebase,autenticadoscomounusuarioanónimopodemosenviar nuevosmensajesalchatquesealmacenaránenFirebaseenclaroyseránvisibles paraelrestodeusuariosdelasala. NótesequesisalimosyvolvemosaentrarenelchatgeneralFirebasenos asignaunnuevoIDaleatorio,porloquenohayformadeidentificarlosmensajes pertenecientesaunmismodispositivo.   38  RicardoRuizTueros   Enlaventanadeperfilpodemoseditarlainformacióndeusuario:nuestro nombreynuestraimagen.Estainformaciónsealmacenaenunficherolocalyes persistenteaunquecerremoslaaplicación.    39  RicardoRuizTueros  Sitocamossobrelafotopodemosseleccionarunaimagendelagaleríacomo nuestrafotodeperfil.    Estaeslainformacióndelotrousuarioconelquerealizaremosla sincronización.  40  RicardoRuizTueros Siabrimoslaventanadecontactosenambosdispositivos:    41  RicardoRuizTueros 7. Referenciasbibliográficas  [1]TactileOneTimePad:LeakageResilientAuthenticationforSmartphones https://www.syssec.rub.de/media/emma/veroeffentlichungen/2015/02/02/vibLogin.pdf  [2]SoundProof:UsableTwoFactorAuthenticationBasedonAmbientSound http://arxiv.org/pdf/1503.03790.pdf  [3]Signal360(AnteriormenteSonicNotify) http://www.gizmag.com/sonicnotifyaudiosignals/21385  [4]AudioModem.Dataoversound. https://applidium.com/en/news/data_transfer_through_sound/  [5]Chirp http://chirp.io  [6]PBKDF2(PasswordBasedKeyDerivationFunction2)RFC https://tools.ietf.org/html/rfc2898#section5.2  [7]Firebase https://firebase.google.com/  [8]CocoaPods https://cocoapods.org/  [9]CryptoSwift https://github.com/krzyzanowskim/CryptoSwift  [10]JSQMessages https://github.com/jessesquires/JSQMessagesViewController/tree/master  48  RicardoRuizTueros [11]FuncióncercanoutilizadaporGoogleenAndroid https://support.google.com/accounts/answer/6260286?p=google_settings_nea rby&rd=1  [12]TheSwiftProgrammingLanguage(Swift3beta).iBookversion. https://itunes.apple.com/es/book/swiftprogramminglanguage/id1002622538? mt=11  [13]UsingSwiftwithCocoaandObjectiveC(Swift2.2).iBookversion. https://itunes.apple.com/es/book/usingswiftcocoaobjective/id888894773?mt= 11  49