<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Arquitectura de software &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/arquitectura-de-software/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Mon, 10 Dec 2018 17:00:35 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.15</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>Arquitectura de software &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Data Access Object (DAO) Pattern</title>
		<link>https://www.oscarblancarteblog.com/2018/12/10/data-access-object-dao-pattern/</link>
					<comments>https://www.oscarblancarteblog.com/2018/12/10/data-access-object-dao-pattern/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Mon, 10 Dec 2018 17:00:35 +0000</pubDate>
				<category><![CDATA[EAI]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[Arquitectura de software]]></category>
		<category><![CDATA[Patron de diseño]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=2484</guid>

					<description><![CDATA[<p>Prácticamente todas las aplicaciones de hoy en día, requiere acceso al menos a una fuente de datos, dichas fuentes son por lo general base de datos relacionales, por lo que muchas veces no tenemos problema en acceder a los datos, sin embargo, hay ocasiones en las que necesitamos tener más de una fuente de datos [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/12/10/data-access-object-dao-pattern/">Data Access Object (DAO) Pattern</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<img loading="lazy" class="aligncenter size-large wp-image-2485" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/DAO-pattern-1024x574.jpg" alt="Data Access Object (DAO) Pattern" width="648" height="363" />Prácticamente todas las aplicaciones de hoy en día, requiere acceso al menos a una fuente de datos, dichas fuentes son por lo general base de datos relacionales, por lo que muchas veces no tenemos problema en acceder a los datos, sin embargo, hay ocasiones en las que necesitamos tener más de una fuente de datos o la fuente de datos que tenemos puede variar, lo que nos obligaría a refactorizar gran parte del código. Para esto, tenemos el patrón Arquitectónico Data Access Object (DAO), el cual permite separar la lógica de acceso a datos de los Bussines Objects u Objetos de negocios, de tal forma que el DAO encapsula toda la lógica de acceso de datos al resto de la aplicación.<span id="more-2484"></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Problemática</h2>
<p>Una de las grandes problemáticas al momento de acceder a los datos, es que <strong>la implementación y formato de la información puede variar según la fuente de los datos</strong>. Implementar la lógica de acceso a datos en la capa de lógica de negocio puedes ser un gran problema, pues tendríamos que lidiar con la lógica de negocio en sí, más la implementación para acceder a los datos, adicional, si tenemos múltiples fuentes de datos o estas pueden variar, tendríamos que implementar las diferentes lógicas para acceder las diferentes fuentes de datos, como podrían ser: bases de datos relacionales, No SQL, XML, archivos planos, Webservices, etc).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Solución</h2>
<p>Dado lo anterior, <strong>el patrón DAO propone separar por completo la lógica de negocio de la lógica para acceder a los datos</strong>, de esta forma, el DAO proporcionará los métodos necesarios para insertar, actualizar, borrar y consultar la información; por otra parte, la capa de negocio solo se preocupa por lógica de negocio y utiliza el DAO para interactuar con la fuente de datos.</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2486" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/UML-clases-1024x493.png" alt="Data Access Object (DAO) pattern - Diagrama de clases" width="648" height="312" /></p>
<p>&nbsp;</p>
<p>Los compones que conforman el patrón son:</p>
<ul>
<li><strong>BusinessObject</strong>: representa un objeto con la lógica de negocio.</li>
<li><strong>DataAccessObject</strong>: representa una capa de acceso a datos que oculta la fuente y los detalles técnicos para recuperar los datos.</li>
<li><strong>TransferObject</strong>: este es un objeto plano que implementa el patrón <a href="https://www.oscarblancarteblog.com/2018/11/30/data-transfer-object-dto-patron-diseno/">Data Transfer Object (DTO)</a>, el cual sirve para transmitir la información entre el DAO y el Business Service.</li>
<li><strong>DataSource</strong>: representa de forma abstracta la fuente de datos, la cual puede ser una base de datos, Webservices, LDAP, archivos de texto, etc.</li>
</ul>
<p>&nbsp;</p>
<p>El siguiente diagrama muestra mejor la forma en que funciona el patrón, pues muestra de forma secuencial la forma en que se ejecutaría el patrón.</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2487" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/UML-sequence-1024x633.png" alt="Data Access Object (DAO) pattern - Diagrama de secuencia" width="648" height="401" /></p>
<p>&nbsp;</p>
<p>El diagrama se interpreta de la siguiente manera:</p>
<ol>
<li>El <em>BusinessObject</em> creo u obtiene una referencia al <em>DataAccessObject</em>.</li>
<li>El <em>BusinessObject</em> solicita información al <em>DataAccessObject</em>
<ul>
<li>El <em>DataAccessObject</em> solicita la información al <em>DataSource</em></li>
<li>El <em>DataAccessObject</em> crea una instancia del TransferObject con los datos recuperados del <em>DataSource</em></li>
<li>El <em>DataAccessObject</em> response con el <em>TransferObject</em> creado en los pasos anteriores.</li>
</ul>
</li>
<li>El <em>BusinessObject</em> actualiza algún valor del <em>TransferObject</em>
<ul>
<li>Más actualizaciones</li>
</ul>
</li>
<li>El <em>BusinessObject</em> solicita el guardado de los datos actualizados al <em>DataAccessObject</em>.
<ul>
<li>El <em>DataAccessObject</em> guarda los datos en el <em>DataSource</em>.</li>
</ul>
</li>
</ol>
<p>&nbsp;</p>
<p>Como hemos podido ver, el <em>BusinessService</em> no se preocupa de donde vengan los datos ni cómo deben de ser guardados en el <em>DataSource</em>, el solo se preocupa por conocer el <em>TransferObject</em>. Un error común al implementar este patrón es no utilizar <em>TransferObject</em> y en su lugar, regresar los objetos que regresan las mismas API’s de las fuentes de datos, ya que esto obliga al <em>BusinessService</em> tener una dependencia con estas librerías, además, si la fuente de datos cambia, también cambiarán estas clases, lo que provocaría una afectación directa al <em>BusinessService</em>.</p>
<p>&nbsp;</p>
<blockquote><p>Hace unos días escribir sobre el patrón <a href="https://www.oscarblancarteblog.com/2018/11/30/data-transfer-object-dto-patron-diseno/">Data Transfer Object (DTO)</a> por si quieres profundizar en el tema.</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>DAO y el patrón Abstract Factory</h2>
<p>Hasta este punto solo hemos analizado como trabajaríamos si solo tuviéramos una fuente de datos, sin embargo, existe ocasiones donde requerimos obtener datos de más de una fuente, y es allí donde entra el patrón de diseño <a href="https://reactiveprogramming.io/books/design-patterns/es/catalog/abstract-factory" target="_blank" rel="noopener">Abstract Factory</a> el cual explico perfectamente en mi libro “Introducción a los patrones de diseño”.</p>
<p>&nbsp;</p>
<figure id="attachment_2333" aria-describedby="caption-attachment-2333" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/design-patterns/es" target="_blank" rel="noopener"><img loading="lazy" class="wp-image-2333 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/09/patrones-diseño-banner-1024x392.jpg" alt="" width="648" height="248" /></a><figcaption id="caption-attachment-2333" class="wp-caption-text">¿Quieres aprender más patrones como este? te invito a que veas mi libro de &#8220;Introducción a los patrones de diseño&#8221;, donde aprenderás los principales patrones de diseño con ejemplos del mundo real, olvídate de aprender con los ejemplos típicos de Internet, como hacer una pizza, crear clase de animales que ladren o figuras geométricas.</figcaption></figure>
<p>&nbsp;</p>
<p>Mediante el patrón Abstract Factory podemos definir una serie de familias de clases que permitan conectarnos a las diferentes fuentes de datos. Para esto, examinaremos un sistema de autenticación de usuarios, el cual puede leer los usuarios en una base de datos o sobre un XML, adicional, el sistema generara registros de login que podrán ser utilizados para auditorias.</p>
<p>Lo primero sería implementar las clases para acceder de las dos fuentes:</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-2488" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/UML-Diagramas-Familys.png" alt="Data Access Object (DAO) pattern - Abstract Factory familias" width="521" height="133" /></p>
<p>&nbsp;</p>
<p>En la imagen anterior podemos apreciar dos familias de clases, con las cuales podemos obtener los Usuarios y los registros de auditoria, sin embargo, estas clases por separado no ayudan mucho, pues no implementan una misma interface que permita la variación entre ellas, por lo que el siguiente paso es crear estas interfaces:</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-2489" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/UML-Diagramas-Familiy-interfce.png" alt="Data Access Object (DAO) pattern - Abstract factory interfaces" width="521" height="301" /></p>
<p>&nbsp;</p>
<p>En este punto, los DAO ya implementan una interfaz común, lo que permite intercambiar la implementación sin afectar al Business Object. Sin embargo, ahora solo falta resolver la forma en que el Business Service obtendrá la familiar de interfaces, es por ello que deberemos crear un Factory para cada familia de interfaces:</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-2490" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/UML-Diagramas-Family-Factory.png" alt="Data Access Object (DAO) pattern - Abstract factory full implementation" width="521" height="546" /></p>
<p>&nbsp;</p>
<p>En esta nueva configuración, podemos ver que tenemos un Factory para cada familia, y los dos factorys implementan una interfaz en común, adicional, tenemos la interface <em>IDAOFactory</em> necesaria para que el factory de cada familia implementen una interface en común.</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2491" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/dao-factory-1024x544.png" alt="Data Access Object (DAO) pattern - Abtract factory sequence" width="648" height="344" /></p>
<p>&nbsp;</p>
<p>Analicemos como quedaría la secuencia de ejecución</p>
<ol>
<li>El <em>BusinessObject</em> solicita la creación de un <em>DAOFactory</em> para SQL
<ul>
<li>El <em>DAOFactory</em> crea una instancia de la clase <em>SQLDAOFactory </em>y la retorna</li>
</ul>
</li>
<li>El <em>BusinessObject</em> solicita al <em>SQLDAOFactory</em> la creación del <em>SQLUserDAO</em> para interactuar con los usuarios.
<ul>
<li>El <em>SQLDAOFactory</em> crea una nueva instancia del <em>SQLUserDAO</em></li>
<li>El <em>SQLDAOFactory</em> retorna la instancia creada del <em>SQLUserDAO</em></li>
</ul>
</li>
<li>El <em>BusinessObject</em> solicita el listado de todos los usuarios registrados al <em>SQLUserDAO</em>
<ul>
<li>El <em>SQLUserDAO</em> recupera los usuarios del <em>SQLDataSource</em></li>
<li>El <em>SQLUserDAO</em> crea un <em>TransferObject</em> con los datos recuperados del paso anterior.</li>
<li>El <em>SQLUserDAO</em> retorna el <em>TransferObject</em> creado en el paso anterior.</li>
</ul>
</li>
</ol>
<p>Adicional a los pasos que hemos listado aquí, podríamos solicitar al <em>SQLDAOFactory</em> la creación del <em>SQLAuditDAO</em> o incluso, solicitar al <em>DAOFactory</em> la creación del <em>XMLFactory</em> para interactuar con la fuente de datos en XML.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Conclusiones</h2>
<p>El patrón DAO es sin lugar a duda, unos de los más utilizados en la actualidad, ya que es fácil de implementar y proporciona claros beneficios, incluso, si solo tenemos una fuente de datos y esta no cambia, pues permite separar por completo la lógica de acceso a datos en una capa separada y así solo nos preocupamos por la lógica de negocio sin preocuparnos de donde viene los datos o los detalles técnicos para consultarlos o actualizarlos.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/12/10/data-access-object-dao-pattern/">Data Access Object (DAO) Pattern</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2018/12/10/data-access-object-dao-pattern/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2484</post-id>	</item>
		<item>
		<title>Seguridad &#8211; Confidencialidad, Integridad y Autenticidad en mensajes</title>
		<link>https://www.oscarblancarteblog.com/2015/02/22/confidencialidad-integridad-y-autenticidad-en-mensajes/</link>
					<comments>https://www.oscarblancarteblog.com/2015/02/22/confidencialidad-integridad-y-autenticidad-en-mensajes/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Sun, 22 Feb 2015 22:30:00 +0000</pubDate>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Arquitectura de software]]></category>
		<guid isPermaLink="false">http://oscarblancarteblog.com/?p=504</guid>

					<description><![CDATA[<p>				Confidencialidad: Es la capacidad de un mensaje para mantener oculto su contenido de tal forma que si una tercera persona ve el mensaje no pueda interpretar su contenido.</p>
<p>Integridad: Se refiera que los elementos mensajes, datos, documentos, y otros formas de contenido no han sido modificados en tránsito o en reposo.</p>
<p>Autenticidad: Se refiere a garantizar que el mensaje ha sido enviado por quien dice ser.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2015/02/22/confidencialidad-integridad-y-autenticidad-en-mensajes/">Seguridad &#8211; Confidencialidad, Integridad y Autenticidad en mensajes</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/cyber-security1-e1438487499493.jpg"><img loading="lazy" class="alignleft wp-image-722" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/cyber-security1-e1438487499493.jpg" alt="" width="132" height="120" /></a></p>
<p>Cada día las aplicaciones tiene mayor necesidad de intercambiar mensajes con el fin de integrar aplicaciones o de comunicar algo a otras aplicaciones, este tipo de intercambio de mensajes ha crecido a un mas con la llegada de la arquitectura orientada a Servicios(SOA), ya que ha creado un ambiente propicio para que las aplicaciones intercambien mensajes de un punto a otro.</p>
<p>Sea cual sea la el motivo por el cual un mensaje es enviado de un punto a otro es indispensable asegurarnos que los mensajes sean enviados en un canal seguro y que el mensaje enviado sea el mismo que se reciba del otro lado sin ninguna alteración, también existen escenario en los que los mensajes contienen información altamente confidencial como datos de nuestros clientes o cuentas bancarias por lo que somos responsables de asegurarnos que la información continué siendo confidencial.</p>
<p>La pregunta aquí es, que mecanismos podemos implementar para que nuestros mensajes sean enviados en un canal seguro, el cual impida que nuestro mensaje sea alterado o descifrado por terceras personas.<span id="more-504"></span></p>
<p>Antes de contestar estas preguntas es importante entender que es la Confidencialidad, Integridad y Autenticidad en mensajes por lo que empezaremos con definir estos términos:</p>
<ul>
<li><strong>Confidencialidad</strong>: Es la capacidad de un mensaje para mantener oculto su contenido de tal forma que si una tercera persona ve el mensaje no pueda interpretar su contenido.</li>
<li><strong>Integridad</strong>: Se refiere a que los elementos mensajes, datos, documentos, y otros formas de contenido no han sido modificados en tránsito o en reposo.</li>
<li><strong>Autenticidad</strong>: Se refiere a garantizar que el mensaje ha sido enviado por quien dice ser.</li>
</ul>
<p>Puede que estos tres términos no nos queden muy claros por lo que a continuación hablaremos mas a detalle de cada tema.</p>
<h2><strong>Confidencialidad</strong>:</h2>
<p style="text-align: left;">La confidencialidad de la información es un tema que tenemos que tener muy presente ya que cada vez que enviamos información por la red estamos exponiéndola a que otras personas no autorizadas puedan interceptarlas y hacer con ellas mucho daño.</p>
<figure id="attachment_511" aria-describedby="caption-attachment-511" style="width: 482px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/sendmessage.png"><img loading="lazy" class="wp-image-511" title="Integridad y autenticidad en mensajes" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/sendmessage.png?w=300" alt="Integridad y autenticidad en mensajes" width="482" height="82" /></a><figcaption id="caption-attachment-511" class="wp-caption-text">Fig.1: En la imagen podemos apreciar un envío típico de mensajes donde el mensaje llega perfectamente del punta A al punto B.</figcaption></figure>
<p>En la imagen anterior podemos ver que un mensaje es enviado de un punto A a un punto B, sin embargo el mensaje no se encuentra cifrado ni se envía por un canal seguro, por lo que podrías ser fácilmente interceptado por una tercera persona.</p>
<figure id="attachment_510" aria-describedby="caption-attachment-510" style="width: 480px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/interceptmessage.png"><img loading="lazy" class="wp-image-510" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/interceptmessage.png?w=300" alt="Integridad y autenticidad en mensajes" width="480" height="187" /></a><figcaption id="caption-attachment-510" class="wp-caption-text">Fig.2: En la imagen se aprecia como una tercera persona intercepta el mensaje.</figcaption></figure>
<p style="text-align: left;">Esta tercera persona podría tener solo curiosidad de ver que hay en el mensaje o podría estar intencionalmente interceptando estos mensajes para hacernos algún daño, en este punto ya hemos perdido la confidencialidad de los datos ya que esta persona ha podido ver la información que hemos enviado.</p>
<p style="text-align: left;">Una de las forma de evitar esto es enviar el mensaje por un canal seguro como https o SSL lo cual hace que nuestro mensaje vaya cifrado desde que sale de nuestro servidor hasta que llega al servidor destino, de esta forma es mucho mas difícil que nuestro intruso pueda recuperar el mensaje original y revelar la información que este contiene.</p>
<figure id="attachment_507" aria-describedby="caption-attachment-507" style="width: 458px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/failintercept.png"><img loading="lazy" class="wp-image-507" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/failintercept.png?w=300" alt="Integridad y autenticidad en mensajes" width="458" height="165" /></a><figcaption id="caption-attachment-507" class="wp-caption-text">Fig.3: Un mensaje es enviado por un canal seguro, evitando de esta forma que el intruso pueda revelar la información del mensaje.</figcaption></figure>
<p style="text-align: left;">Como podemos apreciar en la imagen, nuestro intruso recibe una copia del mensaje cifrado por lo que sera prácticamente imposible que descifre su contenido.</p>
<p style="text-align: left;">Otra alternativa es cifrar el contenido del mensaje y enviar el mensaje por un canal seguro como en el punto anterior, esto nos garantiza tener una seguridad mucho mas fuerte ya que si el intruso logra por alguna razón descifrar el mensaje del canal seguro se presentara con el problema de que el mensaje descifrado esta nuevamente cifrado pero esta vez a nivel del contenido.</p>
<figure id="attachment_512" aria-describedby="caption-attachment-512" style="width: 494px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/trustmessage.png"><img loading="lazy" class="wp-image-512" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/trustmessage.png?w=300" alt="Integridad y autenticidad en mensajes" width="494" height="181" /></a><figcaption id="caption-attachment-512" class="wp-caption-text">Fig. 4: Un intruso logra descifrar el mensaje por el canal seguro, sin embargo se encuentra con que el mensaje aun esta cifrado.</figcaption></figure>
<p>Existen distintos mecanismos de cifrado que nos permitirá enviar mensaje cifrados de un punto a otro y tener la capacidad de descifrar nuevamente el mensaje una vez que llegue a su destino, uno de los algoritmos de cifrado mas utilizados es <a title="RSA" href="http://es.wikipedia.org/wiki/RSA" target="_blank">RSA</a>.</p>
<h2><strong>Autenticidad</strong>:</h2>
<p style="text-align: left;">La autenticidad es algo muy serio cuando hablamos de mensajes ya que de esta forma certificamos que la persona que nos envió el mensaje no es un impostor que se hace pasar por otra entidad. Este tipo de escenarios es muy común cuando nuestro impostor trata de hacer algún daño a nuestros sistemas enviando mensajes para realizar ciertas tareas en nombre de otra entidad.</p>
<p style="text-align: left;">Para prevenir este tipo de ataque es importante que las dos partes sea identificadas antes de que un mensaje sea enviado, para esto se utilizan un intercambio de llaves, son creadas dos llaves, una publica y una privada, la privada nos servirá para cifrar los mensajes, la publica nos servirá para descifrar el mensaje  y validar que el mensaje enviado aya sido enviado por la persona que tiene la llave privada.</p>
<p style="text-align: left;">De esta forma, cuando un mensaje sea enviado de un punto A a un punto B, el punto A enviara el mensaje cifrado con la llave secreta y lo enviara al punto B, el punto B descifrara el mensaje enviado por A y validara que el mensaje fue enviado por A.</p>
<figure id="attachment_514" aria-describedby="caption-attachment-514" style="width: 458px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/keyinterchange.png"><img loading="lazy" class="  wp-image-514" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/keyinterchange.png?w=300" alt="Integridad y autenticidad en mensajes" width="458" height="371" /></a><figcaption id="caption-attachment-514" class="wp-caption-text">Fig. 5: Proceso de intercambio de llaves y envió de mensajes fácilmente autenticables.</figcaption></figure>
<p style="text-align: left;">En la imagen podemos apreciar el proceso por el cual un punto A y un Punto B hacen un intercambio de llaves, los pasos son los siguientes:</p>
<ol>
<li style="text-align: left;">El servidor A crea un par de llaves, una publica y una privada, la privada se la quedara el y sera el único que sepa de la existencia de esta llave, la publica por otra parte es enviada al punto B con el fin de que este sea capas de descifrar los mensajes que vienen de A y a si asegurarse de que A fue el que realmente envió el mensaje.</li>
<li style="text-align: left;">El servidor A envía un mensaje B y lo cifra con la llave privada que creo en el primer paso.</li>
<li style="text-align: left;">B recibe el mensaje y utiliza la llave publica para descifrar el mensaje.</li>
<li style="text-align: left;">Mediante el proceso de descifrado el servidor B puedo estar seguro de que A fue quien realmente envió el mensaje.</li>
</ol>
<h2 style="text-align: left;"><strong>Integridad:</strong></h2>
<p style="text-align: left;">La integridad por otra parte tiene como objetivo identificar que un mensaje no ha sido manipulado por una tercera persona con el fin de realizar alguna acción en nuestro nombre.</p>
<p style="text-align: left;">Existe el escenario en que el intruso logra descifrar el mensaje no solo con el fin de conocer su contenido, si no que a demás esta interesado en hacer algún daño haciéndose pasar por otra nosotros y enviar el mensaje que ha capturado pero haciéndole algunas modificaciones adicionales con el fin de provocar mas daño.</p>
<figure id="attachment_506" aria-describedby="caption-attachment-506" style="width: 465px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/decriptsendmessage.png"><img loading="lazy" class="wp-image-506" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/decriptsendmessage.png?w=300" alt="Integridad y autenticidad en mensajes" width="465" height="169" /></a><figcaption id="caption-attachment-506" class="wp-caption-text">Fig. 6: El mensaje original es interceptado,alterado y enviado de nuevo al destinatario.</figcaption></figure>
<p style="text-align: left;">En la imagen vemos como nuestro impostor no solo intercepto nuestro mensaje si no que a demás creo un mensaje nuevo basado en el mensaje capturado para enviarlo al destinatario haciéndose pasar por el remitente original. Este nuevo mensaje llegara al destinatario y este pensara que fue enviado por nosotros, esto llevara a que el mensaje sea procesado por el destinatario realizando todos los cambios que este demande.</p>
<p style="text-align: left;">Para evitar este tipo de problemas es necesario incrustar un sello electrónico dentro del mensaje, este sello es creado combinando la totalidad del mensaje o una parte significativa en una cadena la cual deberá ser pasado por un algoritmo de digestión como <a title="MD5" href="http://es.wikipedia.org/wiki/MD5" target="_blank">MD5</a>, <a title="SHA-1" href="http://en.wikipedia.org/wiki/SHA-1" target="_blank">SHA-1</a>, <a title="SHA-2" href="http://es.wikipedia.org/wiki/SHA-2" target="_blank">SHA-2</a> con el fin de crear una cadena mucho mas reducida, esta cadena deberá ser cifrada mediante un certificado de sello digital.</p>
<figure id="attachment_522" aria-describedby="caption-attachment-522" style="width: 646px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/sellodigital.png"><img loading="lazy" class="  wp-image-522" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/sellodigital.png?w=300" alt="Integridad y autenticidad en mensajes" width="646" height="239" /></a><figcaption id="caption-attachment-522" class="wp-caption-text">Fig. 7: Mensaje completo(XML), debajo tenemos la cadena original y al final la cadena tras pasar por MD5.</figcaption></figure>
<p style="text-align: left;">En la imagen podemos ver un ejemplo de un mensaje en XML el cual tiene datos de los clientes, debajo tenemos la cadena original generada a partir del la información del mensaje, notemos que no utilizamos todo el mensaje si no solo sus datos, y al final tenemos la cadena original tras pasar por el proceso de digestión MD5, en este punto solo nos quedara hacer el cifrado de la cadena mediante nuestro certificado de sello digital para tener un verdadero sello digital que garantice la integridad del mensaje.</p>
<p style="text-align: left;">Finalmente nuestro mensaje quedaría de la siguiente manera:</p>
<figure id="attachment_525" aria-describedby="caption-attachment-525" style="width: 651px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/mensajesellodigital.png"><img loading="lazy" class="wp-image-525" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/mensajesellodigital.png?w=300" alt="Integridad y autenticidad en mensajes" width="651" height="128" /></a><figcaption id="caption-attachment-525" class="wp-caption-text">Fig. 8: Muestra un mensaje con sello digital y cadena original para poder validar la integridad del mensaje</figcaption></figure>
<p style="text-align: left;">Cuando el destinatario tome el mensaje, validara que la cadena fue generada con la misma información que contiene el documento. Si un impostor altera el contenido del mensaje no tendrá las llaves para crear el sello electrónico valido, por lo que el destinatario sabrá de inmediato que el mensaje ha sido alterado y su integridad ha sido violada.</p>
<figure id="attachment_505" aria-describedby="caption-attachment-505" style="width: 526px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/certmessagefail.png"><img loading="lazy" class="wp-image-505" title="Integridad y autenticidad en mensajes" src="http://www.oscarblancarteblog.com/wp-content/uploads/2015/02/certmessagefail.png?w=300" alt="Integridad y autenticidad en mensajes" width="526" height="163" /></a><figcaption id="caption-attachment-505" class="wp-caption-text">Fig.8: Un segundo mensaje invalido es enviado por el impostor.</figcaption></figure>
<p style="text-align: left;">En la imagen podemos apreciar como el mensaje original llega al punto B y este de inmediato valida que el sello digital corresponde con la información enviada, por otra parte el intruso crea un nuevo mensaje alterando el contenido del mensaje original, sin embargo, el nuevo mensaje seguirá teniendo el sello original ya que el intruso no tendrá los certificados para crear un nuevo sello basado en la información que altero, El server B detectará esta irregularidad y de inmediato rechazará el mensaje.</p>
<h2 style="text-align: left;"><strong>Conclusión</strong>.</h2>
<p style="text-align: left;">Como ves, existen muchos riesgos cuando de mandar mensaje se trata, por lo que es importante determinar que nivel de seguridad debemos implementar al enviar nuestros mensajes, es por eso que es importante conocer los riesgos y saber las estrategias a tomar para prevenir este tipo de situaciones.</p>
<p style="text-align: left;">También es importante destacar que estas técnicas son perfectamente combinables para crear un envió mucho mas seguro, por lo que podríamos tener mensajes que contengan sello digital, se envíen cifrados y sobre un canal seguro. esto desde luego logra que nuestro mensaje sea Confidencial, Integro y sea Autentico.</p>
<p style="text-align: left;">Si te gusto este post no dudes en recomendarlo ya que esto me ayudara a seguir creando mas y mejor material.</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2015/02/22/confidencialidad-integridad-y-autenticidad-en-mensajes/">Seguridad &#8211; Confidencialidad, Integridad y Autenticidad en mensajes</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2015/02/22/confidencialidad-integridad-y-autenticidad-en-mensajes/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">504</post-id>	</item>
	</channel>
</rss>
