10 conceptos que todo Ingeniero de Software debe conocer

El futuro del desarrollo de software es de unos buenos artesanos. Con la infraestructura como Amazon Web Services y un gran número de bibliotecas básicas, ya no tiene un pueblo para construir una buena pieza de software.

En estos días, un par de ingenieros que saben lo que están haciendo puede suministrar sistemas completos. En este puesto, hablamos de las 10 principales conceptos de ingenieros de software debe saber para conseguirlo

El éxito de ingeniero de software conoce y utiliza patrones de diseño, código activamente refactors, escribe ensayos y unidad religiosa busca la simplicidad. Más allá de los métodos básicos, hay conceptos que la buena ingenieros de software conocer. Estos trascienden lenguajes de programación y proyectos – que no son patrones de diseño, sino más bien grandes áreas que usted necesita estar familiarizado con. The top 10 concepts are: Los 10 principales conceptos son los siguientes:

  1. Interfaces
  2. Convenios y plantillas
  3. Capas
  4. La complejidad algorítmica
  5. Hashing
  6. Caching
  7. Concurrencia
  8. Nubes de Computación
  9. Seguridad
  10. Bases de Datos Relacionales

10. Bases de Datos Relacionales

Bases de datos relacionales han sido recientemente recibiendo un mal nombre porque no pueden escalar bien el apoyo masivo a servicios web. Sin embargo, este fue uno de los logros más fundamentales de la informática que nos ha llevado durante dos décadas y seguirá siendo durante mucho tiempo. Bases de datos relacionales son excelentes para la gestión de pedidos de sistemas, bases de datos corporativas y P & L de datos.

En cada registro se añade a una tabla, que define el tipo de información. La base de datos ofrece una forma de buscar los registros utilizando un lenguaje de consultas, en la actualidad SQL. La base de datos ofrece una manera de correlacionar la información de múltiples tablas.

La técnica de los datos sobre la normalización es la manera correcta de particionamiento de datos entre las mesas para minimizar la redundancia de datos y maximizar la velocidad de recuperación.

9. Seguridad

Continuar leyendo “10 conceptos que todo Ingeniero de Software debe conocer”

Mitos y leyendas: Las contraseñas en Windows III (LM y NTLM)

Microsoft ha mejorado gradualmente la seguridad de su fichero SAM, pero también ha mantenido la compatibilidad hacia atrás con sistemas inherentemente inseguros como Windows 9x. Con la cada vez mayor sofisticación de herramientas capaces de atacar por fuerza bruta los hashes LM y NTLM, el cifrado (sobre todo el LM) se ha vuelto virtualmente inútil si la contraseña no es realmente entrópica y compleja. En Vista, por fin, se ha eliminado al menos el eslabón más débil, el hash LM.

Si se estudia el resultado de un volcado online u offline (tras ‘saltarse’ el syskey) de la SAM, veremos algo así:

Administrador:500:42f29043y123fa9c74f23606c6g522b0:71759a1bb2web4da43e676d6b7190711:::

que oculta en realidad el hash LM de la contraseña

(42f29043y123fa9c74f23606c6g522b0) y el hash NTLM

(71759a1bb2web4da43e676d6b7190711)

Continuar leyendo “Mitos y leyendas: Las contraseñas en Windows III (LM y NTLM)”

¿Port Knocking… ofuscación o capa de seguridad?

Fuente: www.hispasec.com

El objeto de este artículo es recordar el concepto de “Port Knocking” y sus implicaciones de seguridad para en un posterior artículo reflexionar sobre “Single Packet Authorization” (SPA). “Port Knocking” no es un ingenio nuevo, lleva con nosotros desde 2003, pero es un tema recurrente en listas de correo y discusiones sobre seguridad.

 

¿Qué es “Port Knocking”?

 

Todos hemos visto películas en las que alguien golpea cierta secuencia en la puerta de una taberna y si la secuencia era correcta el tabernero abre una rendija para solicitar una clave verbal. Si la secuencia de llamada no era correcta, ninguna medida se toma y el interesado cree que la taberna se halla cerrada. El concepto de “Port Knocking” es exactamente análogo.

 

En informática, este concepto consiste en enviar paquetes a ciertos puertos en un orden específico con el fin de abrir un puerto en concreto. Este último puerto se halla cerrado por un cortafuegos siempre y cuando no se realice el barrido de puertos siguiendo la secuencia particular. De esta forma, si un atacante efectúa un escaneo del sistema, el puerto aparecerá cerrado aun estando el servicio asociado a él en funcionamiento, el cortafuegos hace un simple DROP si no se ha efectuado la secuencia de barrido previa.

  Continuar leyendo “¿Port Knocking… ofuscación o capa de seguridad?”

Algoritmo A* en Java

Aqui teneis la codificacion en Java de uno de los algoritmos de Busqueda de Camino mas usados en Inteligencia Artificial


Java A* Algorithm
=================

// -*- mode: java; folded-file: t -*-
/*
* Author Geert-Jan van Opdorp
*
* Copyright (c) 1995 AI Engineering.
*
*/
package aie.astar;
// {{{ import

import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;
import java.lang.*;
import java.util.*;

// }}}

// {{{ final class node

final class node {
  State state;
  int costs;
  int distance;
  int total;
  node parent;
  node(State theState, node theParent,  int theCosts, int theDistance) {
    state = theState;
    parent = theParent;
    costs = theCosts;
    distance = theDistance;
    total = theCosts + theDistance;
  };
}
Continuar leyendo "Algoritmo A* en Java"

Nsa@Home

Proyecto independiente que usando los procesadores de los codificadores de TDT que han dejado de funcionar (si esos del carrefour po 30 €), cuyo objetivo es romper claves cifradas mediante algoritmos SHA-1 y MD5 usando la fuerza bruta. Es capaz de analizar 800 hashes (o contraseñas cifradas) a la vez y de recorrer todas las claves posibles de 8 caracteres (de un set de 64 caracteres) en tan sólo 24 horas. En la web del proyecto hay una completísima documentación del proceso de fabricación

NSA@Home

 

Fuente: http://www.meneame.net