Título: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 29 Octubre 2019, 21:32 pm Secured-Hash 2018: Código fuente de las funciones incluídas en el archivo S-Hash.Prg convertido para poder funcionar en MicroSoft Visual Fox Pro 6.0 Professional. ¿Quiere más seguridad para su software desarrollado con Visual Fox Pro?
https://sites.google.com/site/psacrypt/proyectos/secured-hash ;-) Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 30 Octubre 2019, 00:53 am El software original que has descargado lo hize con el compilador Harbour 3.0. Es lento, creo que porque harbour tiene problemas de gestion de memoria con BigStrings. Ya hize un programa para medir la velocidad. Visual Fox Pro es un compilador que usa el mismo lenguaje de programación en versión más antigua, similar a dBase. Mejora un poco la velocidad, pero no mucho. Si dispongo del tiempo suficiente lo desarrollaré en compiladores más eficientes en velocidad. Y si te parece spam me alegro que mi software no sea para ti. :-)
Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 30 Octubre 2019, 01:28 am Es curioso, precisamente este proyecto es uno de los pocos que tengo en Open Source. :-)
Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: MCKSys Argentina en 30 Octubre 2019, 02:54 am Hola!
Por lo que veo, el source está en el repo de github. Aunque no podamos comprobar que el source corresponde al binario (no dispongo del compilador), el usuario tiene cuenta desde hace varios años y no hay razones para desconfiar (más allá de que hizo el mismo post 4 veces). Por otro lado, el README.md del repo dice que el programa es lento. Para evitar cualquier inconveniente, ejecutar en una VM. Analisis de VT: https://www.virustotal.com/gui/file/770999475e150216e48d82aa2857a9d6f7855017328ddc630802f9e25cbf4f81/detection (https://www.virustotal.com/gui/file/770999475e150216e48d82aa2857a9d6f7855017328ddc630802f9e25cbf4f81/detection) Saludos! Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 30 Octubre 2019, 05:33 am Bueno, a ver cómo lo digo ... no me gusta GitHub. Parece que nadie se ha molestado en leer el resto de la página, menos mal que hay pocas palabras. :-p
Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: kub0x en 30 Octubre 2019, 08:27 am Bueno, a ver cómo lo digo ... no me gusta GitHub. Parece que nadie se ha molestado en leer el resto de la página, menos mal que hay pocas palabras. :-p Retiro lo dicho, mis disculpas. Visité tu github y no vi el código fuente. Estoy acostumbrado a que se incluya en la misma plataforma y no tenga que descargar nada. Vi un fichero .7z lo descomprimi y revisé ambos sources para Win y Linux, todo correcto. Ahora, las funciones hash que utiliza tu aplicación supongo que acaban llamando a la API encargada de la criptografía en ambos sistemas operativos. Esto ya será cosa del lenguaje que utilices y las librerías que lo acompañen. Desde aquí te invito a que lo portes a C# o C/C++ para que gane en performance. Saludos. Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 31 Octubre 2019, 12:03 pm C/C++ no se lleva bien conmigo. Si le puedo dedicar tiempo tengo pensado sacarlo en Lazarus/FPC y FreeBasic. Antes que dedicarme a convertir código tengo que terminar otros proyectos, este lo convertí a VFP6 por estar desarrollando otro proyecto en ese compilador. Por otra parte, sigo sin poder enseñar a leer al foro. :-p
p.d: no usa API's. Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: kub0x en 5 Noviembre 2019, 08:19 am Por otra parte, sigo sin poder enseñar a leer al foro. :-p Bueno ya no es cuestión de leer sino veo el code en git saltan las alarmas, es verdad que viene incluido en un archivo comprimido por lo tanto aceptable. p.d: no usa API's. Entonces ¿has cogido la especificación de dichas funciones de resumen y las has implementado tú? Normalmente si yo quiero hacer el digest de un mensaje, llamo a la cryptoAPI de Win o bien openssl en Linux y le digo que me devuelva el hash correspondiente. Está bien como proyecto si verdaderamente implementaste tu desde 0 las funciones pertinentes, pero no lo recomiendo en entornos comerciales o empresariales ya que los errores pasan desapercibidos. Ya si te pones con crypto simétrica o asimétrica (con claves vamos) tendrías que blindar el padding y los side channel attacks entre otros, pero está divertido como proyecto personal implementar todo desde 0 y me parece fantástico que haya usuarios de este foro dedicándole tiempo a esto. Saludos. Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 5 Noviembre 2019, 13:43 pm La version de github no es la más reciente (cuesta aprender a leer). Este es un proyecto que desarrollé mara mostrar nuevas funcionalidades en funciones de Hash. La seguridad del cifrado interno se ha reducido intencionadamente (entropía menor). Las versiones profesionales, que no son Open Source, son las que ofrecen mayor seguridad. En el mejor de los cifrados que he inventado sólo me queda por terminar el modo asimétrico. :-)
Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: kub0x en 5 Noviembre 2019, 15:14 pm Las versiones profesionales, que no son Open Source, son las que ofrecen mayor seguridad Quizá quisiste decir más métodos o funcionalidades. No se de donde sacas que las versiones profesionales ofrecen mayor seguridad que las de Open Source, es una afirmación completamente infundada. Define "Seguridad". La seguridad yace cuando hay pruebas matemáticas fehacientes que prueben que el esquema es vulnerable bajo cierta parametrización, vease criptoanálisis. Que yo sepa, bearssl, openssl, nss, nacl y demás cumplen con los estándares FIPS creados por el NIST. De hecho yo me negaría rotúndamente a utilizar soluciones "de pago" o propietarias que no incluyan el código, vease BSAFE RSA y el escándalo Dual_EC_DRBG.Citar La seguridad del cifrado interno se ha reducido intencionadamente (entropía menor). Hombre tanto como cifrado no, que son funciones de resumen, pero se entiende tu punto desde el punto de vista de la PRF.Citar En el mejor de los cifrados que he inventado sólo me queda por terminar el modo asimétrico. Estaría bien que una vez lo termines publiques un link aquí al PDF de tu investigación, me encanta analizar nuevos métodos y aportar sobre los mismos de forma objetiva. Ánimo con ello.Citar La version de github no es la más reciente (cuesta aprender a leer) Hombre me paso todo el día leyendo y se me cansan los ojos jajaj Dejate de google sites y utiliza GitHub como es debido. Estás en un foro, si es código desactualizado dilo en el post, cuanta más info des mejor. Sube el code en git, haz releases estilo project y ahí es donde incluyes el comprimido con el src y el ejecutable.Saludos. Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 5 Noviembre 2019, 16:34 pm Son funciones de Hash seguras, incluyen cifrado y resumen. Como ya he mencionado, paso de github. Tampoco conozco ningún cifrado que incorpore los métodos de seguridad internos que yo he desarrollado en el mío. Lo de la confianza me da igual, invento la seguridad que quiero para mis proyectos. :-)
Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: Serapis en 5 Noviembre 2019, 16:44 pm Antes de nada, perdón, pués yo puse un mensaje (que deben haber borrado) de "Esto es Spam", por la simple razón de que solo había 2 líneas de texto y un enlace (apuntando fuera del foro), además juraría que vi repetido el mensaje en otro lado... Sin más explicaciones, ni ningún simple ejemplo de nada, sonaba claramente a Spam.
Mirando así por encima, veo cosas muy mejorables.. por ejemplo la simple función de invertir una cadena de texto: Código: Function ReverseStr(_cIn) Concatenar una cadena es algo que no debe hacerse más de 1 ó 2 veces para obtener un contenido, por que cada concatenación exige buscar memoria libre con la suma total de caracteres y copiar ahí las partes a unir... luego en un bucle de por ejemplo 100 caracteres invertir esa cadena supone crear 100 veces una cadena y copiar cada vez las partes que la componen, total para ir añadiendo cada vez un solo carácter respecto del contenido previo... Crea una cadena del largo total (cuando se conoce) o más (si no se conoce y al final se devuelve el 'substring' de solo la parte ocupada)... "_rStr" será igual de larga finalmente que "_cIn", luego procede al comienzo hacerla del mismo tamaño. ... y vas tomando caracteres del final de la cadena y poniéndolos al comienzo, o al revés, los tomas del comienzo y los vas poniendo al final retrocediendo. Así a lo sumo creas solo 2 veces la cadena, independientemente del largo que tenga. Una forma sencilla de probar ambas funciones (la que tienes y la que tendrías que rehacer), sería usar una cadena de por ejemplo 100Mb. y comparar tiempos, en la que te falta por hacer (la óptima), no llevaría más de unos segundos, en la que tienes posiblemente varios minutos (no sé si bastarían 20)... Cansa ver la forma en que nombras las variables locales y parámetros: La barra baja "_cStr", suele usarse en los lenguajes para: - Separar visualmente palabras en identificadores largos, como en: "Precio_Articulo". - También para unir 'gramáticamente' el nombre de un objeto al nombre de un evento, como en: "Precio_Changed", existiendo un objeto llamado "Precio" que pertenece a un tipo de datos que tiene un evento llamado "Changed". - Microsoft, cuando finalmente dió facilidades para crear las propiedades autoimplementadas (yo mismo solicité esa característica... hace ya un chorro de años), usa precisamente la barra baja al comienzo del nombre con el mismo nombre de la propiedad para dar respaldo al campo que ha de mantener el valor de la propiedad, dando así oportunidad al usuario de no usar nombres en tal forma, para evitar errores por duplicidad de declaraciones, es una buena alternativa peor para usar exclusivamente en la parte del compilador, no para que un usuario deba enfrentarse a nombres así formados. Sugiero que como mínimo remplaces esa barra baja por algún carácter legible... por ejemplo para las locales: "lcStr", para los parámetros: "pcStr", para las locales a nivel de módulo: "mcStr"... etc... Fíjate que incluso leerlo obliga a decir "barra baja cStr", una vez no importa, pero por cada una es requetecansimo... intenta leer tu propio código para que otro lo copie a medida que te oye, y entenderás el absurdo. Y todas las excusas que te inventes, como indicarle de antemano que es 'una regla', sigue siendo absurda... cambia de interlocutor y verás que resulta absurdo explicarle a cada interlocutor una regla, innecesaria... porque para esos existen las letras del abecedario.. son legibles ocupan lo mismo y dispones de 26 mayúsculas y 26 minúdculas... si tienes una regla para señalar que "los nombres d evariables en parámetros las comienzo con 'p', es una regla que no hay necesidad de explicar a nadie, porque 'pcStr', podría llamarse de cualquier otra manera todo el mundo entenderá que hayas elegido ese nombre por alguna razón. ...de todos modos, es siempre preferible poner nombres significativos a las variables (significativas, los parámetros lo son, las variables de tipo contador por ejemplo no y para ellas les baste j, k, t, n, v, etc...). ...en el mismo sentido los nombres de la mayoría de funciones son amorfas... si el códiigo es para tí, no tiene más importancia, tu sabes 'tus reglas', pero si ofeces tu código a otros, complicas innecesariamente las cosas... de qué sirve poner debajo luego un comentario de lo que hace la función, cuando el propio nombre de la función debería sugerir bastante claro lo que debe hacer... ejemplo: Tu nombre: Function "SB" Lo adecuado: Function "StringToBase36" O como mínimo: Function "StrToB36" Otro ejemplo de ineficiencia es ese par de funciones de conversión de ASCII a base 36 y viceversa Código: Function SB(_cIn) De entrada el código es tortuoso, mareante y pecas de nuevo con concatenaciones... Cuando una conversion forma parte de un proyecto, forozoso es, crear sendos arrays para convertir a y desde usando un simple bucle con apenas 1-4 líneas dentro del bucle, tanto para la codificación como para la decodificación... Incluso en el caso de tener que hacer variadas conversiones tal que no resulte adecuado tener tablar para cada base usada, entonces procede in situ hacer la conversión de forma matemática (división y módulo para codificar y multiplicación y suma para decodificar). Siempre que se pueda es preferible crear arrays para una traducción rápida, ya que luego el compilador, viendo que tiene un bucle y un array, tratará la direcciones con registro de índice, lo que acelerará las conversiones, pués evita calcular la dirección absoluta para cada índice del array con multiplicaciones... Encuentro iguales problemas de inficiencia en muchas otras funciones... También juraría que las funciones "SHCrypt" y "SHDeCrypt" son idénticas... Procede hacerlo más coherente, una sola función basta, puede llamarse "Crypt" y que acepte un parámetro adicional con valor buelano: Si FALSE=SHDeCrypt y si TRUE=SHCrypt, aunque como no hay diferencias en lo que hace da igual. Otra forma si prefieres mantener los nombres, es dejar una sola funcion, y la otra compleamente vacía se remite simplemente a invocar a la que tiene el código... (porque hacen exactamente lo mismo, solo cambia el nombre de la función). Además en esa función de cifrado veo muchos 'modulo', pero no veo ningún 'xor'. Ya te digo por descontado que funciones de cifrado basadas exclusivamente en operaciones aritméticas, son proclives a generar patrones reproducibles de los que aprovecharse. Incluso teniendo operaciones 'xor' si no se controlan adecuadamente también están sujetas a lo mismo, como le pasa por ejemplo al algoritmo RC4. ... En fin, solo he mirado el fichero "S-Hash.Prg" y si no me gusta lo que veo, no creo que el resto vaya a ser distinto... p.d.: He tenido que retirar las etiqeutas GEsHI, porque al parecer duplica el contenido cuando el lenguaje es "visualfoxpro", y se ve mal... Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: kub0x en 5 Noviembre 2019, 16:59 pm Citar Son funciones de Hash seguras, incluyen cifrado y resumen. Keyed hash functions estilo HMAC supongo. Si es así entonces la palabra cifrar si tiene sentido. Podría haberlo deducido leyendo tu código, pero basic dejó de ser lo mío hace más de un lustro. Pero como puedes ver el gran NEBIRE está al día en el lenguaje y te está dando buenos consejos, como siempre :DCitar Tampoco conozco ningún cifrado que incorpore los métodos de seguridad internos que yo he desarrollado en el mío. Bueno quizá por aquí te podamos ayudar si aportas algo de información al respecto. Es fácil construir y díficil destruir, pero merece la pena si te gusta el campo. Esto lo digo porque en mis comienzos no encontraba referencias a ninguno de los métodos con los que yo trabajaba. Una vez me especialicé en matemáticas empece leer y leer libros-publicaciones en el campo y ya entonces vi que existían métodos parecidos, incluso idénticos lo que te llena de rabia y alegría a la vez pues sabes que vas por el buen camino. Por lo tanto si eres versado en matemáticas te irá bien, al menos personalmente me ha ido bien aprendiendo teoría de números, álgebra lineal, álgebra cominatorial, álgebra geométrica, teoría de la representación y teoría de grupos. Para hacer algoritmos asimétricos clásicos (no post-quanticos) con saber teoría de números y grupos te vale.Citar Lo de la confianza me da igual, invento la seguridad que quiero para mis proyectos. No entendí bien lo de "confianza".Supongo que quieres decir que en tus proyectos mandas tú. Supongo que para tí la crypto es un hobby nada más, pero el día de mañana si quieres publicar tus esquemas criptográficos, te aviso de que la comunidad criptografa no revisará ningún esquema sin la parte del criptonálisis-complejidad-seguridad. Como el gran Bruce Schneier dijo Citar Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break. En mi vida lo he visto, pues he conseguido romper casi todo lo que he creado, y lo que no, analizado y publicado está. Incluso he publicado lo roto, todo aprendizaje si está bien documentado (matemáticamente) es candidato a ser publicado. Así que si lo rompes podrías publicarlo de todas formas.Saludos. Título: Re: Secured-Hash 2018 - Funciones para VFP6 Publicado por: eb4bgr en 5 Noviembre 2019, 21:44 pm No es Basic, es un lenguaje parecido a dBase. Si no dispone de funciones tan específicas para trabajar con caracteres habrá que crearlas. Si lo meto todo en una matriz y luego lo recodifico pierdo el tiempo haciendo 2 bucles. Los nombres de variables los asigno así porque todo ese código forma parte de otro proyecto más complejo en el que me hace falta esa denominación.
|