30 Abril 2009

nueve pruebas

Archivado en: Pensamiento — voet
Así ocurre que el noble observa desde lejos a los que trabajan para él y toma en cuenta su lealtad.
Y les observa de cerca para tomar en cuenta su respeto.
Pone a prueba su capacidad enfrentándolos a asuntos difíciles
y comprueba su conocimiento haciéndoles alguna pregunta inesperada.
Comprueba su fidelidad obteniendo su compromiso y pone a prueba su benevolencia dándoles riqueza.
Comprueba su fortaleza y resolución advirtíendoles de peligros inminentes.
Haciendo que se emborrachen, prueba su habilidad para cuidar de sí mismos.
Y mezclándoles con personas de todos los niveles pone a prueba su castidad.
Mediante estas nueve pruebas es posible descubrir a los que no son valiosos.

Chuang Tsé, hace 2400 años.

Archivado en: Pensamiento

29 Abril 2009

alimentos transgénicos

Archivado en: Ciencia, Comer, Denuncia, Salud — voet

Ayer oí hablar por enésima vez de lo chungos que son los alimentos transgénicos. Pero claro, aduciendo los argumentos de siempre. Suele ocurrir que cuando se habla de un tema se cae siempre en los mismos topicazos y conceptos-relacionados-por-los-pelos y rara vez se considera la posibilidad de que, en realidad, el debate va por otro camino.

Claro que son peligrosos los alimentos transgénicos… pero no porque te vaya a morder la lechuga o por que te vayan a salir antenas en la cara por comerlos. Ya en serio, tampoco existe un peligro real (y esto ha sido investigado independientemente y a fondo) de que los genes insertados puedan “saltar de unas especies a otras”, de tal manera que se puedan obtener plantas dañinas con las ventajas de las plantas de cultivo modificadas genéticamente.

De hecho, los alimentos transgénicos son, en el sentido químico, alimentos indistinguibles de los naturales, siempre que los genes que les hayan insertado no se dediquen a producir sustancias extrañas, claro. Que de todos modos casi siempre son sustancias naturales provenientes de otra especie: la ingeniería genética de momento funciona por copia-pega. Y que porque sean sustancias naturales no quiere decir que sean necesariamente sanas. Pero me estoy saliendo del tema.

El peligro de estos alimentos no son los que nos venden habitualmente. No te va a pasar nada por comer tomates gigantes (aplicación bellísima de la biotecnología) o arroz de la quinta o sexta cosecha de este año (aplicación todavía mejor). El peligro real está en las tácticas de monopolio de los grandes comerciantes de semillas. Esta política de negocio no sólo está poniendo en peligro las técnicas de cultivos tradicionales de muchos países del tercer mundo, sino el futuro de la humanidad.

Pondré un ejemplo relacionado con un sector importantísimo a nivel mundial que es la producción industrial de semillas:

Ya desde el neolítico conocemos la mejor técnica existente para seleccionar las semillas que se van a plantar al año que viene. Consiste en escoger las semillas mejores porque sean más gordas, más ricas, etc…, en resumidas cuentas, las mejor adaptadas al clima o terreno concreto del lugar de cultivo. Sin embargo, este método de selección no supone ninguna garantía contra las plagas animales o vegetales que pueden afectar a esos cultivos.

Esto fue así hasta la revolución verde, en los años 50 del siglo pasado. En ese momento se produjo un aumento increíble de la productividad de los cultivos gracias al uso de abonos químicos (irrenunciables hoy en día) y al de los pesticidas. El problema es que la gran mayoría de éstos son muy peligrosos para el consumo humano y muchos de ellos son tan letales para los cultivos como para las plagas.

Con el desarrollo de la ingeniería genética se produjo una nueva revolución, sobretodo para los vendedores multinacionales de semillas, como la satánica Monsanto. Se podían “construir” a medida plantas resistentes a determinados pesticidas… pero había un problema: bastaba con adquirir semillas durante un año para tenerlas durante generaciones, con lo que sólo se podían vender una vez.

La gracia está en que el comercio de semillas y pesticidas está en las mismas manos. Estos señores se dedican a producir pesticidas… cambiando su composición cada año. De esta manera, las semillas resistentes de la cosecha anterior no son válidas para la siguiente, pues la composición del pesticida ha cambiado. Así el agricultor está obligado a comprar las nuevas semillas junto con el pesticida.

Solamente teniendo en cuenta esto que acabo de contar ya estamos hablando de posibles consecuencias catastróficas, pues de este modo agricultores de todo el mundo deben renunciar a las variedades locales para adquirir “semillas estándar”, seguramente fabricadas en cualquier planta de Illinois. Todo en nombre de la productividad.

Pues bien… las técnicas de la ingeniería genética alcanzaron su máxima degradación con la invención de la tecnología KnockOut. Consiste nada más y nada menos que en LA PRODUCCIÓN DE PLANTAS CON SEMILLAS ESTÉRILES [amable lector, llévese las manos a la cabeza: gracias]. De este modo, a las multinacionales no les es necesario cambiar de pesticida ni desarrollar nuevas semillas todos los años.

La terrible conclusión es que LA ALIMENTACIÓN DE MEDIO PLANETA ESTÁ HIPOTECADA A LAS DECISIONES COMERCIALES DE ESTAS MULTINACIONALES.

Este es el tipo de peligros reales a los que tenemos que enfrentarnos. No a las consecuencias de una tecnología potencialmente beneficiosa, sino a su utilización supeditada a los beneficios empresariales.

Archivado en: Ciencia, Comer, Denuncia, Salud

27 Abril 2009

glob

Archivado en: Ironía — voet

He llegado a la conclusión de que tener un blog es la cosa más ordinaria del mundo así que en consecuencia, un tío fino lo que ha de tener es un glob.

Archivado en: Ironía

allison goldfrapp

Archivado en: Música — voet

allisongoldfrappNo se crean Vds. que se me han acabado las chicas-guapas-y-raras-que-hacen-música-de-estética-retrofuturista-que-además-están-jamonas-y-con-las-que-yo-me-casaría. Que sería de esta lista sin Allison Goldfrapp.

Ella es la cantante del dúo llamado, sorprendentemente, Goldfrapp, que ha alcanzado el éxito y el reconocimiento que merece.

Y aunque la chica canta realmente bien, la verdad es que la parte del dúo que más interesante encuentro es Will Gregory, compositor y saxofonista que colaboró con un montón de músicos y grupos como Portishead (que por momentos tiene un sonido bastante similar) antes de formar Goldfrapp en 1999. Y no sólo le encuentro más interesante a él (musicalmente) sino que además, ella cada vez va más en plan soy-supersexy-como-madonna y *gn* no es un rollito con el que servidor de vds. comulgue mucho estética ni personalmente. Pero cómo canta la chica.

La música del dúo es indudablemente electrónica: pero tiene una cualidad orgánica indiscutible y una enorme y original riqueza tímbrica. Por ejemplo, en el tema “Lovely Head” (que pongo más abajo como vídeo) la guitarra/silbido que suena no es tal: es la chica pegando chillidos más o menos afinados y pasados por un filtro de válvulas, además de otros efectos un Korg MS-20 (gracias Xel por la info).

Por otra parte no es la típica formación que hace siempre las mismas canciones hasta que al llegar al quinto disco se acaban las ideas (no, no me refería a Dover pero bueno, si te empeñas…). Goldfrapp evoluciona musicalmente de disco en disco y cada uno que sacan realmente aporta algo o tiene un espíritu distinto con respecto al anterior. Otra cosa es que a mí me gusten más los primeros discos…

… y del primer disco es el vídeo que pongo a continuación. Aquí podemos ver a la señorita Allison luciendo cacha/nalga y haciendo monerías/mohínes varios mientras rompe sillas de plástico. Obviamente no debían tener un duro cuando hicieron el vídeo… pero no os quedéis con la imagen… escuchad, escuchad…


Me sigue gustando más Elaine.

Archivado en: Música

digital signature KeySelector

Archivado en: Java — voet

A la hora de validar una firma digital XML, encontramos que es necesario pasarle como parámetro a DOMValidateContext un KeySelector. ¿Pero qué es esto? Nada tan especial, en el fondo.

La cuestión es que para establecer la validez de la firma de un XML necesitamos por narices disponer de la clave pública del firmante… que suele venir en el propio XML empotrada de alguna manera. Java no es tan listo como para encontrar por sí mismo las claves dentro del XML que está analizando, con lo que le tenemos que ayudar. Por eso definimos una clase como extensión de KeySelector que le dice al DOMValidateContext dónde tiene que buscar. De todos modos, si no queremos hacerlo, siempre podemos buscar previamente nosotros la clave y pasársela como parámetro. Pero si podemos implementar un KeySelector, mejor.

Otras implementaciones de la misma clase presentes en internet buscan los valores del módulo y exponente de la clave pública en tags específicos del estándar de firma de XML. Esto a veces da problemas. Por ejemplo: aunque módulo y exponente se deben almacenar como ds:cryptobynary (es decir, valor binario codificado como base64) en ocasiones podemos encontrarnos patadas como el valor en ASCII pasado a base64.

Esta implementación (que se debe introducir como clase interna en nuestra clase verificadora) sin embargo busca en primer lugar dentro de una clave ds:X509 los valores de módulo y exponente escondidos dentro del certificado, y sólo si no los encuentra busca en los otros tags interiores de ds:KeyInfo. En teoría esto debería funcionar con cualquier fichero XAdES.

private static class X509KeySelector extends KeySelector {
		/**
		 * Permite al objeto DOMValidateContext (necesario en el proceso de
		 * analizar un XAdES) buscar una clave X509 dentro de un objeto KeyInfo.
		 * En otras implementaciones se busca como tags aparte. En esta, se
		 * intenta extraer del propio certificado presente en el XML ya que
		 * puede estar almacenado como crypto-ASCII en vez de como
		 * crypto-binary. {@inheritDoc}
		 *
		 * @see javax.xml.crypto.KeySelector#select(javax.xml.crypto.dsig.keyinfo
		 *      .KeyInfo, javax.xml.crypto.KeySelector.Purpose,
		 *      javax.xml.crypto.AlgorithmMethod,
		 *      javax.xml.crypto.XMLCryptoContext)
		 */
		@SuppressWarnings("unchecked")
		public KeySelectorResult select(KeyInfo keyInfo,
				KeySelector.Purpose purpose, AlgorithmMethod method,
				XMLCryptoContext context) throws KeySelectorException {
			// ya que los valores de modulus y exponent presentes en xades
			// pueden estar codificados como ASCII+base64, los saco directamente
			// del certificado adjunto
			PublicKey localkey = null;
			X509Certificate lx509 = getCertificadoDesdeKeyInfo(keyInfo);

			if (lx509 == null) {// si no encontró certificado, leemos otros
				// valores de keyInfo
				List list = keyInfo.getContent();
				for (int i = 0; i < list.size(); i++) {
					XMLStructure xmlStructure = (XMLStructure) list.get(i);
					if (xmlStructure instanceof KeyValue) {
						try {
							localkey = ((KeyValue) xmlStructure).getPublicKey();
						} catch (KeyException ke) {
							throw new KeySelectorException(ke);
						}
					}
				}
			} else {// si encontró certificado, preferimos leer de ahí
				localkey = lx509.getPublicKey();
			}

			final PublicKey key = localkey;
			// Asegurarse de que el método es compatible con el
			// algoritmo
			if (algEquals(method.getAlgorithm(), key.getAlgorithm())) {
				return new KeySelectorResult() {
					public Key getKey() {
						return key;
					}
				};
			}
			// si el algoritmo no es compatible...
			throw new KeySelectorException("Clave no encontrada");
		}

		/**
		 * Comprueba si se especifica clave RSA o DSA.
		 *
		 * @param algURI
		 * @param algName
		 * @return true en caso de encontrar cualquiera de los dos algoritmos
		 *         criptográficos especificados en el KeyInfo.
		 */
		static boolean algEquals(String algURI, String algName) {
			if ((algName.equalsIgnoreCase("DSA") && algURI
					.equalsIgnoreCase(SignatureMethod.DSA_SHA1))
					|| (algName.equalsIgnoreCase("RSA") && algURI
							.equalsIgnoreCase(SignatureMethod.RSA_SHA1))) {
				return true;
			} else {
				return false;
			}
		}
	}

	/**
	 * Devuelve el objeto X509certificate contenido dentro del KeyInfo
	 * especificado.
	 *
	 * @param pki
	 *            Instancia de KeyInfo a analizar.
	 * @return El certificado, que puede ser null.
	 */
	@SuppressWarnings("unchecked")
	private static X509Certificate getCertificadoDesdeKeyInfo(KeyInfo pki) {
		X509Data x509data = null;
		X509Certificate x509cert = null;

		// miramos si encontramos objeto x509data
		List klist = pki.getContent();
		for (int i = 0; i < klist.size(); i++) {
			XMLStructure xmlStructure = (XMLStructure) klist.get(i);
			// System.out.println(xmlStructure.getClass());
			if (xmlStructure instanceof X509Data) {
				x509data = (X509Data) xmlStructure;
			}
		}

		// miramos ahora si encontramos un certificado x509
		if (x509data != null) {
			List xlist = x509data.getContent();
			for (int i = 0; i < xlist.size(); i++) {
				Object contenido = (Object) xlist.get(i);
				// System.out.println(contenido.getClass());
				if (contenido instanceof X509Certificate) {
					x509cert = (X509Certificate) contenido;
				}
			}
		}
		return x509cert;
	}

Archivado en: Java
índice   cranf.net   wordnadapress
123