<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Information Literacy on kenji.blog</title><link>http://kenji.blog/es/tags/information-literacy/</link><description>Recent content in Information Literacy on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/tags/information-literacy/index.xml" rel="self" type="application/rss+xml"/><item><title>Deepfakes y Alfabetización Informacional: Cómo Detectar Noticias Falsas Tecnológicamente</title><link>http://kenji.blog/es/p/deepfake-info-literacy/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/deepfake-info-literacy/</guid><description>&lt;img src="http://kenji.blog/p/deepfake-info-literacy/img/eyecatch.jpg" alt="Featured image of post Deepfakes y Alfabetización Informacional: Cómo Detectar Noticias Falsas Tecnológicamente" />&lt;h1 id="introducción-una-era-en-la-que-se-disuelve-la-frontera-entre-la-realidad-y-la-ficción">Introducción: Una era en la que se disuelve la frontera entre la realidad y la ficción
&lt;/h1>&lt;p>Entrando en la década de 2020, la evolución de la IA generativa (Generative AI) avanza a una velocidad sin precedentes. Textos, audios, imágenes y hasta videos, con un nivel indistinguible de los creados por humanos, ahora se pueden generar en cuestión de segundos. Si bien este avance tecnológico aporta inmensos beneficios a los campos creativos, también ha creado una grave amenaza social: la proliferación de contenido falso y altamente sofisticado conocido como &amp;ldquo;deepfakes&amp;rdquo;.&lt;/p>
&lt;p>Los deepfakes amenazan a la sociedad de diversas formas: discursos falsos de políticos, estafas en las que se hacen pasar por CEOs de empresas (una evolución de las estafas BEC) o pornografía difamatoria de celebridades. Especialmente durante los períodos electorales, la propagación de noticias falsas mediante deepfakes ha escalado hasta el punto de sacudir los cimientos de la democracia.&lt;/p>
&lt;p>En esta era, lo que se nos exige es una actualización de nuestra &amp;ldquo;alfabetización informacional&amp;rdquo;. El sentido común de &amp;ldquo;creer en lo que ven mis propios ojos&amp;rdquo; ya no es válido. En este artículo, comenzando por el contexto técnico de cómo se generan los deepfakes, explicaremos a un nivel muy profundo, incorporando fórmulas matemáticas y código, los métodos de análisis forense digital más avanzados para detectarlos &amp;ldquo;tecnológicamente&amp;rdquo;, así como los marcos (como C2PA) para que toda la sociedad contrarreste la información falsa.&lt;/p>
&lt;hr>
&lt;h1 id="1-el-mecanismo-de-la-ia-generativa-detrás-de-los-deepfakes">1. El mecanismo de la IA generativa detrás de los deepfakes
&lt;/h1>&lt;p>Para entender los deepfakes, primero debemos conocer el funcionamiento de la IA generativa que los sustenta. Las dos arquitecturas principales utilizadas actualmente para generar imágenes y videos de alta definición son las &amp;ldquo;GAN&amp;rdquo; (Generative Adversarial Networks: Redes Generativas Antagónicas) y los &amp;ldquo;Diffusion Models&amp;rdquo; (Modelos de Difusión).&lt;/p>
&lt;h2 id="11-redes-generativas-antagónicas-gan">1.1 Redes Generativas Antagónicas (GAN)
&lt;/h2>&lt;p>Propuestas por Ian Goodfellow y sus colegas en 2014, las GAN fueron las precursoras de la tecnología deepfake. Las GAN utilizan dos redes neuronales que asumen los roles de &amp;ldquo;falsificador&amp;rdquo; y &amp;ldquo;policía&amp;rdquo;, compitiendo entre sí (aprendizaje antagónico) para generar datos extremadamente realistas.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Generador (Generator, $G$)&lt;/strong>: Toma un ruido aleatorio (variable latente $z$) como entrada y genera datos (como imágenes) que parecen reales.&lt;/li>
&lt;li>&lt;strong>Discriminador (Discriminator, $D$)&lt;/strong>: Determina si los datos de entrada son &amp;ldquo;reales&amp;rdquo; (Real), provenientes del conjunto de datos auténtico, o &amp;ldquo;falsos&amp;rdquo; (Fake), creados por el generador.&lt;/li>
&lt;/ul>
&lt;p>Estas dos redes avanzan en su aprendizaje optimizando una función de pérdida formulada como el siguiente juego minimax (Minimax):&lt;/p>
$$
\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_{z}(z)}[\log(1 - D(G(z)))]
$$&lt;p>Aquí, $x$ representa los datos reales y $z$ la variable latente (ruido). El discriminador $D$ intenta maximizar esta ecuación (distinguir con precisión entre lo real y lo falso), mientras que el generador $G$ intenta minimizarla (engañar al discriminador). Cuando este aprendizaje alcanza un estado de equilibrio (equilibrio de Nash), el generador es capaz de producir datos indistinguibles de los reales.&lt;/p>
&lt;pre class="mermaid">
flowchart LR
Z[&amp;#34;Vector Latente Z&amp;#34;] --&amp;gt; G[&amp;#34;Generador&amp;#34;]
G --&amp;gt; F[&amp;#34;Imagen Falsa&amp;#34;]
R[&amp;#34;Imagen Real&amp;#34;] --&amp;gt; D[&amp;#34;Discriminador&amp;#34;]
F --&amp;gt; D
D --&amp;gt; O[&amp;#34;Evaluación de Veracidad (Real/Falso)&amp;#34;]
O -.-&amp;gt;|&amp;#34;Retroalimentación de Pérdida&amp;#34;| G
O -.-&amp;gt;|&amp;#34;Retroalimentación de Pérdida&amp;#34;| D
&lt;/pre>
&lt;h2 id="12-modelos-de-difusión-diffusion-models">1.2 Modelos de Difusión (Diffusion Models)
&lt;/h2>&lt;p>En los últimos años, presumiendo de una calidad de imagen y estabilidad que superan a las GAN, la tecnología subyacente de Midjourney y Stable Diffusion son los &amp;ldquo;Modelos de Difusión&amp;rdquo;. Los modelos de difusión constan de un &amp;ldquo;proceso de difusión hacia adelante&amp;rdquo; (Forward Process) que añade ruido gradualmente a los datos, y un &amp;ldquo;proceso de difusión inversa&amp;rdquo; (Reverse Process) que restaura los datos originales a partir del ruido.&lt;/p>
&lt;p>En el &lt;strong>proceso de difusión hacia adelante (Forward Process)&lt;/strong>, se añade ruido gaussiano a una imagen limpia $x_0$ en cada paso de tiempo $t$. Este proceso se expresa como una cadena de Markov con la siguiente ecuación:&lt;/p>
$$
q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I})
$$&lt;p>Aquí, $\beta_t$ es el parámetro de programación que controla la varianza del ruido. Después de suficientes pasos $T$, $x_T$ se convierte en un ruido aleatorio completo.&lt;/p>
&lt;p>En el &lt;strong>proceso de difusión inversa (Reverse Process)&lt;/strong>, una red neuronal (generalmente una arquitectura U-Net) aprende a predecir el ruido a partir de la imagen ruidosa $x_t$ y a restaurar el paso anterior $x_{t-1}$. Al combinar este proceso con un condicionamiento (como un prompt de texto), es posible generar una imagen arbitraria desde cero (ruido).&lt;/p>
&lt;hr>
&lt;h1 id="2-análisis-forense-digital-la-técnica-de-buscar-rastros-en-los-productos-generados">2. Análisis forense digital: La técnica de buscar rastros en los productos generados
&lt;/h1>&lt;p>Por muy avanzados que sean los modelos generativos, los datos creados por IA siempre dejan &amp;ldquo;rastros matemáticos y estadísticos (artefactos)&amp;rdquo; imperceptibles para el ojo humano. Las tecnologías de detección (detectores de deepfakes) capturan estos rastros minúsculos a través de diversos enfoques.&lt;/p>
&lt;h2 id="21-análisis-en-el-dominio-de-la-frecuencia-y-dct-transformada-de-coseno-discreta">2.1 Análisis en el dominio de la frecuencia y DCT (Transformada de Coseno Discreta)
&lt;/h2>&lt;p>El ojo humano es sensible a los cambios espaciales de color y brillo de una imagen (dominio espacial), pero es insensible a los cambios de frecuencia (dominio de la frecuencia). Las imágenes generadas por GAN o modelos de difusión pueden parecer perfectas a primera vista, pero durante el proceso de sobremuestreo (upsampling, de baja a alta resolución) producen patrones de frecuencia específicos (como el artefacto de tablero de ajedrez).&lt;/p>
&lt;p>Para detectarlo, a menudo se utiliza la &lt;strong>Transformada de Coseno Discreta (Discrete Cosine Transform, DCT)&lt;/strong>. La DCT representa una imagen como la suma de ondas coseno de diferentes frecuencias. La ecuación de la DCT bidimensional es la siguiente:&lt;/p>
$$
X_{k_1, k_2} = \sum_{n_1=0}^{N_1-1} \sum_{n_2=0}^{N_2-1} x_{n_1, n_2} \cos\left[\frac{\pi}{N_1}\left(n_1 + \frac{1}{2}\right)k_1\right] \cos\left[\frac{\pi}{N_2}\left(n_2 + \frac{1}{2}\right)k_2\right]
$$&lt;p>Las imágenes generadas tienden a tener una distribución de energía anormal en las &lt;strong>componentes de alta frecuencia (ruido fino y cambios bruscos en los bordes)&lt;/strong> en comparación con las imágenes naturales. El siguiente código en Python es un ejemplo sencillo que utiliza la DCT para extraer la energía de los componentes de alta frecuencia de una imagen.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">cv2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">scipy.fftpack&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">extract_high_frequency_features&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">image_path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Carga de la imagen y conversión a escala de grises&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">img&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">imread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">image_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">IMREAD_GRAYSCALE&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">img&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">ValueError&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Image not found&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Aplicación de la Transformada de Coseno Discreta (DCT) bidimensional&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Primero se aplica la DCT unidimensional a las filas, y luego a las columnas&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dct_result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scipy&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fftpack&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dct&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">scipy&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fftpack&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dct&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">img&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">norm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ortho&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">norm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;ortho&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Extracción de componentes de alta frecuencia (enmascarando y poniendo a cero las bajas frecuencias arriba a la izquierda)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">rows&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cols&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dct_result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">shape&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mask&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ones&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">rows&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cols&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Enmascarar la región de baja frecuencia (10% del total)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mask&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rows&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.1&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">:&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cols&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.1&lt;/span>&lt;span class="p">)]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">high_freq_features&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dct_result&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">mask&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Calcular la cantidad de energía en la región de alta frecuencia&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">energy&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sum&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abs&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">high_freq_features&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">energy&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Al comparar una imagen natural con una generada, suele haber una diferencia estadística significativa en el valor de &amp;#34;energy&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Esta falta de naturalidad en el dominio de la frecuencia ocurre porque, aunque la IA puede aprender la &amp;ldquo;coherencia local a nivel de píxel&amp;rdquo;, le resulta difícil imitar por completo las &amp;ldquo;características de frecuencia globales de la imagen en su conjunto&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h1 id="3-detección-de-señales-biológicas-confirmando-el-latido-de-la-vida-mediante-rppg">3. Detección de señales biológicas: Confirmando el &amp;ldquo;latido de la vida&amp;rdquo; mediante rPPG
&lt;/h1>&lt;p>Además de las tecnologías de detección de imágenes (imágenes fijas), un enfoque revolucionario para la detección de deepfakes en videos es la &lt;strong>extracción de señales biológicas (Biological Signals)&lt;/strong>.&lt;/p>
&lt;p>Mientras un humano esté vivo, la sangre circula por el cuerpo al ritmo de los latidos del corazón. Dado que la hemoglobina en la sangre absorbe fuertemente longitudes de onda específicas (especialmente la luz verde, de unos 530 nm), el color de la piel de la cara cambia de manera minúscula (a un nivel invisible para el ojo humano) en sincronía con el ritmo cardíaco. La tecnología que utiliza este principio para estimar la frecuencia cardíaca sin contacto a partir de un video de cámara RGB normal se denomina &lt;strong>rPPG (Fotopletismografía Remota, remote Photoplethysmography)&lt;/strong>.&lt;/p>
&lt;p>El modelo básico de rPPG, basado en la absorción y reflexión de la luz, se expresa según la ley de Beer-Lambert de la siguiente manera:&lt;/p>
$$
I(t) = I_0(t) e^{-\left( \mu_{dc} + \mu_{ac}(t) \right) d}
$$&lt;p>Aquí, $I(t)$ es la intensidad de la luz observada por la cámara, $I_0(t)$ es la intensidad de la fuente de luz, $\mu_{dc}$ es el coeficiente estático de absorción de la luz por los tejidos, $\mu_{ac}(t)$ es el coeficiente dinámico de absorción de la luz debido a la fluctuación del flujo sanguíneo (latido cardíaco), y $d$ es la longitud de la trayectoria de la luz.&lt;/p>
&lt;p>Los videos deepfake (por ejemplo, el intercambio de rostros conocido como FaceSwap, o sincronizar el movimiento de los labios con un audio en Lip-sync) persiguen el realismo visual fotograma a fotograma, pero &lt;strong>no pueden reproducir los minúsculos cambios en el flujo sanguíneo (señal cardíaca) a lo largo del eje temporal.&lt;/strong> Por lo tanto, si se intenta extraer una señal de rPPG de un video deepfake, se obtendrá una señal antinatural y llena de ruido, muy diferente de un ritmo cardíaco humano natural (que normalmente es un ciclo regular en el rango de 60 a 100 lpm).&lt;/p>
&lt;pre class="mermaid">
flowchart LR
V[&amp;#34;Flujo de Video&amp;#34;] --&amp;gt; F[&amp;#34;Detección y Seguimiento Facial&amp;#34;]
F --&amp;gt; R[&amp;#34;Extracción de Región de Interés (ROI)&amp;#34;]
R --&amp;gt; S[&amp;#34;Agrupamiento Espacial (Spatial Pooling)&amp;#34;]
S --&amp;gt; B[&amp;#34;Filtro Pasa Banda&amp;#34;]
B --&amp;gt; H[&amp;#34;Señal de Latido Cardíaco&amp;#34;]
H --&amp;gt; A[&amp;#34;Clasificación Falso/Real&amp;#34;]
&lt;/pre>
&lt;p>A continuación se muestra un ejemplo de implementación conceptual en Python de una canalización (pipeline) para extraer señales rPPG de un video.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">cv2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">scipy&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">signal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">extract_rppg_signal&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">video_path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cap&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">VideoCapture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">video_path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">green_signals&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">cap&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isOpened&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ret&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">frame&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cap&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">ret&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 1. Detección facial y extracción del ROI (Región de Interés: por ejemplo, frente o mejilla)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># roi = detect_face_and_extract_roi(frame)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Aquí, para simplificar, se toma la parte central del fotograma entero como ROI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">h&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">w&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">frame&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">shape&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">roi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">frame&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.3&lt;/span>&lt;span class="p">):&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.6&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.4&lt;/span>&lt;span class="p">):&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mf">0.6&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 2. Extracción del canal Verde desde el espacio RGB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Porque la hemoglobina de la sangre es la que más absorbe la luz verde&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g_channel&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">roi&lt;/span>&lt;span class="p">[:,&lt;/span> &lt;span class="p">:,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 3. Agrupamiento espacial (cálculo del valor medio)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mean_g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mean&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">g_channel&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">green_signals&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mean_g&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cap&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">release&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">green_signals&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 4. Eliminación de ruido mediante filtro pasa banda&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Extracción de la banda de frecuencia del latido cardíaco humano (ej: 0.7Hz a 2.5Hz = 42 a 150 bpm)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">30.0&lt;/span> &lt;span class="c1"># Frecuencia de fotogramas (frame rate) hipotética&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nyquist&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">0.5&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">fps&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">low&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">0.7&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">nyquist&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">high&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">2.5&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">nyquist&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">signal&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">butter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">low&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">high&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">btype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;bandpass&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">filtered_signal&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">signal&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">filtfilt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">green_signals&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">filtered_signal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Se analiza el espectro de frecuencia de la &amp;#39;filtered_signal&amp;#39; extraída y,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># si no hay un pico claro (latido cardíaco), se determina que es muy probable que sea un deepfake.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="4-el-interminable-juego-del-gato-y-el-ratón-aprendizaje-antagónico-y-técnicas-de-evasión">4. El interminable juego del &amp;ldquo;gato y el ratón&amp;rdquo;: Aprendizaje antagónico y técnicas de evasión
&lt;/h1>&lt;p>Como hemos presentado, existen tecnologías forenses avanzadas como el análisis de frecuencia y las señales biológicas (rPPG). Sin embargo, en el mundo de la IA, no existe una &amp;ldquo;barrera absoluta&amp;rdquo;. Cuando se publica un artículo científico sobre una tecnología de detección, los atacantes (los creadores de deepfakes) mejoran inmediatamente sus modelos generativos para evadir ese detector.&lt;/p>
&lt;p>Por ejemplo, supongamos que un detector descubre un deepfake identificando &amp;ldquo;anomalías en el dominio de la frecuencia&amp;rdquo;. El atacante &lt;strong>incorporará ese mismo detector como un nuevo &amp;ldquo;Discriminador&amp;rdquo; de su GAN&lt;/strong>, y volverá a entrenar el Generador. Entonces, el Generador evolucionará para generar imágenes que sean &amp;ldquo;indistinguibles de las imágenes naturales, incluso en el dominio de la frecuencia&amp;rdquo;.&lt;/p>
&lt;p>Además, ya se han reportado investigaciones (Anti-Forensics) que intentan engañar a los sistemas de detección basados en rPPG agregando intencionalmente &amp;ldquo;fluctuaciones microscópicas de color (señales cardíacas falsas)&amp;rdquo; artificiales al video durante el posprocesamiento.&lt;/p>
&lt;p>La detección y la generación están literalmente envueltas en un interminable juego del gato y el ratón (Cat-and-Mouse Game) de &amp;ldquo;el escudo y la lanza&amp;rdquo;. Por este motivo, se señala que un enfoque basado únicamente en analizar los datos de salida (imágenes o videos) a posteriori para determinar su autenticidad (detección pasiva) terminará llegando a su límite.&lt;/p>
&lt;hr>
&lt;h1 id="5-la-medida-fundamental-certificación-de-procedencia-y-el-marco-c2pa">5. La medida fundamental: Certificación de procedencia y el marco C2PA
&lt;/h1>&lt;p>A medida que la detección a posteriori llega a su límite, lo que se está promoviendo rápidamente en todo el mundo es un enfoque defensivo activo que garantice criptográficamente el &amp;ldquo;origen (Provenance)&amp;rdquo; de los datos. La Coalición &lt;strong>C2PA (Coalition for Content Provenance and Authenticity)&lt;/strong> es la encargada de construir el marco de referencia mundial para ello.&lt;/p>
&lt;p>C2PA es un consorcio fundado por empresas líderes como Adobe, Microsoft, Intel, BBC y Sony, que ha desarrollado especificaciones técnicas para incrustar el historial de procedencia del contenido digital (quién, cuándo, con qué cámara se tomó y qué ediciones se han realizado) en el contenido mismo de una forma inalterable.&lt;/p>
&lt;h2 id="51-cómo-funciona-c2pa">5.1 Cómo funciona C2PA
&lt;/h2>&lt;p>La tecnología central de C2PA es la firma digital mediante Infraestructura de Clave Pública (PKI) y el enlace (binding) de los hashes del contenido.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Generación de metadatos (Manifest)&lt;/strong>: En el momento en que se toma una foto con una cámara, o cuando se edita con software, se genera un metadato llamado &amp;ldquo;Manifiesto (Manifest)&amp;rdquo; que incluye el historial de esas acciones, la información del dispositivo y la información del creador.&lt;/li>
&lt;li>&lt;strong>Firma criptográfica (Digital Signature)&lt;/strong>: Se aplica una firma digital sobre el Manifiesto y sobre el valor hash de la propia imagen (un resumen de los datos de los píxeles), utilizando claves privadas de hardware o software.&lt;/li>
&lt;li>&lt;strong>Incrustación en el activo (Asset)&lt;/strong>: El manifiesto firmado (C2PA Credential) se incrusta en la información de la cabecera del formato del archivo, como JPEG o MP4.&lt;/li>
&lt;/ol>
&lt;p>Si un atacante altera parte de la imagen o intenta añadir metadatos falsos a una imagen generada por IA, el valor hash de la propia imagen cambiará, por lo que fallará la verificación de la firma digital y la manipulación se detectará al instante.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
C[&amp;#34;Creador / Cámara&amp;#34;] --&amp;gt; M[&amp;#34;Generación de Manifiesto&amp;#34;]
M --&amp;gt; S[&amp;#34;Firma Criptográfica&amp;#34;]
S --&amp;gt; A[&amp;#34;Activo con Manifiesto C2PA&amp;#34;]
A --&amp;gt; P[&amp;#34;Plataforma de Redes Sociales&amp;#34;]
P --&amp;gt; V[&amp;#34;Proceso de Validación&amp;#34;]
V --&amp;gt; U[&amp;#34;Interfaz de Credenciales de Contenido&amp;#34;]
&lt;/pre>
&lt;h2 id="52-visualización-mediante-el-icono-content-credentials">5.2 Visualización mediante el icono &amp;ldquo;Content Credentials&amp;rdquo;
&lt;/h2>&lt;p>En los sistemas que cumplen con el estándar C2PA, cuando los usuarios ven una imagen en redes sociales o sitios de noticias, aparecerá un icono &amp;ldquo;CR (Content Credentials)&amp;rdquo; en la esquina de la imagen. Al hacer clic en él, cualquier persona puede verificar de forma transparente el historial de la imagen: si &amp;ldquo;fue generada por IA&amp;rdquo;, &amp;ldquo;fue tomada por una cámara real&amp;rdquo; o &amp;ldquo;si se ajustó el color en Photoshop&amp;rdquo;.&lt;/p>
&lt;p>Actualmente, los principales proveedores de IA, como OpenAI (DALL-E 3) y Google, han comenzado a adjuntar metadatos C2PA a las imágenes que generan, y fabricantes de cámaras como Leica y Sony también están avanzando en la implementación de funciones de firma C2PA a nivel de hardware. El paradigma de la sociedad está cambiando de &amp;ldquo;detectar lo falso&amp;rdquo; a &amp;ldquo;probar que es auténtico (enfoque de Zero-Trust)&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h1 id="6-alfabetización-informacional-de-próxima-generación-lo-que-podemos-hacer-nosotros">6. Alfabetización informacional de próxima generación: Lo que podemos hacer nosotros
&lt;/h1>&lt;p>Las medidas tecnológicas (detectores de deepfakes y la certificación de procedencia como C2PA) son solo una infraestructura para proteger a la sociedad. Quien finalmente decide si consumir o difundir la información es el cerebro humano.&lt;/p>
&lt;p>En la era de la IA, la &amp;ldquo;alfabetización informacional&amp;rdquo; de próxima generación implica tener las siguientes actitudes:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Evitar la difusión impulsiva (Stop and Think)&lt;/strong>
Cuando te encuentres con imágenes impactantes o contenidos que provoquen ira (información que apela a las emociones), debes detenerte un momento y evitar dar retuit o compartir inmediatamente. El objetivo principal de los creadores de deepfakes es &amp;ldquo;hackear&amp;rdquo; las emociones humanas para difundir información.&lt;/li>
&lt;li>&lt;strong>Verificar el &amp;ldquo;origen&amp;rdquo; de la información (Verify the Source)&lt;/strong>
¿La información proviene de un medio de comunicación confiable? ¿Se le ha adjuntado una prueba de procedencia como C2PA (Content Credentials)? Es importante cultivar el hábito de cotejar (cross-check) la fuente de la información.&lt;/li>
&lt;li>&lt;strong>Escepticismo saludable de que &amp;ldquo;todo podría ser falso&amp;rdquo; (Healthy Skepticism)&lt;/strong>
No es necesario ser pesimista, pero debemos descartar el sentido común del pasado que decía &amp;ldquo;el video es igual a los hechos&amp;rdquo;. Tenemos que consumir la información asumiendo que vivimos en una era en la que todo —audio, video y texto— puede falsificarse fácilmente.&lt;/li>
&lt;/ol>
&lt;h1 id="conclusión">Conclusión
&lt;/h1>&lt;p>La evolución de la tecnología de IA ha abierto la caja de Pandora. Ya es imposible erradicar la tecnología en sí que genera los deepfakes.&lt;/p>
&lt;p>Sin embargo, como se explicó en este artículo, los ingenieros están enfrentando la amenaza de las noticias falsas a través de diversos enfoques, como el análisis de frecuencia, la detección de señales biológicas y la certificación de procedencia basada en criptografía (C2PA). Al combinar este &amp;ldquo;escudo técnico (medidas defensivas)&amp;rdquo; con el &amp;ldquo;escudo social&amp;rdquo; que es la &amp;ldquo;alfabetización informacional&amp;rdquo; de cada uno de nosotros, deberíamos ser capaces de surfear la ola de ficciones que trae la IA y proteger el valor de la verdad.&lt;/p>
&lt;p>Precisamente porque vivimos en una era en la que la línea entre la realidad y la ficción se desvanece, la &amp;ldquo;voluntad&amp;rdquo; humana de intentar discernir la verdad se vuelve más importante que nunca.&lt;/p></description></item></channel></rss>