(Septembre 2015) Une fonction de hachage moderne

Où nous allons parler de SHA-1, SHA-2 mais surtout SHA-3

Le problème exposé dans ce sujet a été résolu.

Merci pour le sujet. Mais j'ai quand même un gros souci pour lire le contenu. Tous les deux mots apparaît un nouveau concept avec une nouvelle définition et je ne parle même pas du pseudo code - des raccourcis par-ci par-là. La boucle comment est-ce qu'on la définit ?

J'avoue que par rapport à ce qu'on trouve sur internet, c'est plus complet. Pour autant, un néophyte des méthodes de hashage ne comprend rien du tout. A quoi ressemble notre objet A ? Sur d'autre source, on ne voit plus le A comme un simple tableau de 5x5 mais un objet en 3 dimensions.

En faite dès le début je suis largué. D'accord, j'ai une variable l qui vaut 6 (c'est par défaut - why ?), puis w qui vaut 2l = 26 = 64, puis un b qui vaut 25*w = 25*64 = 1600. A partir de là, on introduit un tableau de 5x5 - on ne sait pas d'où il apparaît dans le comportement du programme.

Tu dis qu'il faut tout ça :

  • bourrage
  • permutation
  • fonction éponge
  • condensat

Mais dans quel ordre ? Est-ce qu'il y a une boucle qui englobe l'ensemble ?

+2 -2

Tu te poses trop de questions, contente-toi de lire ce qui est écrit sans chercher des difficultés là où il n'y en a pas. Ce que je vous ai fourni, c'est la version la plus simplifiée possible de la norme (pour tenter de contenter ceux qui ne savent pas lire), qui reste complète.

Qu'est-ce que tu vas chercher d'autres sources ? À part t'embrouiller, qu'est-ce que tu espères obtenir ? A, c'est l'état interne de la fonction, ce sur quoi on travaille à tout moment, et il s'agit d'une suite ordonnée de 25w bits.

Ensuite, il peut être plus pratique selon les circonstances de traiter cette suite de bits comme un objet ayant une autre forme. Pour la fonction de permutation, c'est beaucoup plus simple de la traiter comme une matrice de 5 × 5 trucs de w bits de longueur. Pour la fonction d'éponge, dans mon implémentation, il était plus simple de la traiter comme une liste de 25 trucs de w bits de longueur, mais dans l'implémentation de référence en C, ils ont préféré la traiter comme un unique buffer de 25w bits de long.

Et pour la démonstration mathématique de la solidité cryptographique de la fonction, et uniquement dans ce cadre, il est plus pratique de la traiter comme une matrice en 3D de 5 × 5 × w trucs de 1 bit de long. D'où le schéma que tu exhibes, qui est directement tiré de la norme, et qui n'a strictement aucun intérêt dans le cadre d'une simple implémentation de la fonction. Raison pour laquelle je n'en ai pas parlé.

De même que je n'ai pas parlé de la manière dont sont générées les constantes, parce que dans le cadre présent, on n'en a rien à foutre, et ça n'aurait fait que rendre les explications plus compliquées.

Voilà donc d'où sort le tableau de 5 × 5 : c'est simplement une manière différente (et plus pratique sur le moment) d'interpréter A.

Et c'est tout. Y'a rien de compliqué.

Quant à l'ordre dans lequel il faut mettre les fonctions, relis donc attentivement mon explication, et tu verras qu'il n'y a pas d'ambiguïté sur l'ordre d'utilisation, sauf sur la question du bourrage, parce que ça peut dépendre de ton choix d'implémentation.

Tu as la fonction d'éponge, qui absorbe petit à petit le message donné en entrée, puis recrache un condensat. C'est la « boucle principale » de la fonction. À la fin de chaque itération de cette boucle, l'état interne est envoyé à la fonction de permutation. Une fois que cette boucle principale est terminée, on met le condensat sous une forme lisible (ce que tu appelles l'étape « condensat »).

Quant au bourrage, ça dépend de ce qui est le plus pratique pour toi. Personnellement, je trouve plus simple de le placer avant la fonction d'éponge, mais l'implémentation de référence en C le place entre la partie absorption et la partie extraction de la fonction d'éponge.

l qui vaut 6 (c'est par défaut - why ?)

Quand j'te dis que tu te poses trop de questions… Ça vaut 6, parce que la norme SHA-3 a dit « nous, on va utiliser un l qui vaut 6, alors c'est comme ça », y'a aucune raison spécifique.

+6 -8

Le pourquoi du l=6 c'est quand même pour avoir w=64 et donc offrir des optimisations aux systèmes en 64 bits (probablement parce qu'ils sont ou seront à terme majoritaires sur le marché ?) si j'ai bien compris, non ? Ou alors c'est une optimisation qui aurait été possible même sans cette contrainte en interprétant A différemment, mais dans ce cas je suppose que ça nécessite de changer Keccac plus en profondeur ?

Tu te poses trop de questions […]

Je suis un geek, c'est tout. La question "Pourquoi ?" est très importante à mes yeux (surtout quand je ne comprends pas).

A propos, merci pour ton travail. Ce que je trouve dommage dans ton sujet, c'est qu'il y a peu d'effort de vulgarisation. :)

Bon voici un pseudo code, est-ce que ça correspond à l'implémentation que tu as pu en faire ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Programme SHA-3
// Définition des constantes
RC = [
    0x0000000000000001, 0x0000000000008082, 0x800000000000808A,
    0x8000000080008000, 0x000000000000808B, 0x0000000080000001,
    0x8000000080008081, 0x8000000000008009, 0x000000000000008A,
    0x0000000000000088, 0x0000000080008009, 0x000000008000000A,
    0x000000008000808B, 0x800000000000008B, 0x8000000000008089,
    0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
    0x000000000000800A, 0x800000008000000A, 0x8000000080008081,
    0x8000000000008080, 0x0000000080000001, 0x8000000080008008]

r = [
    [0, 36, 3, 41, 18],
    [1, 44, 10, 45, 2],
    [62, 6, 43, 15, 61],
    [28, 55, 25, 21, 56],
    [27, 20, 39, 8, 14]
]

// Définition des variables
l = 6
w = 2^l
b = 25w
m = "Mon message lambda"
A = [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]
]

// Préparation
tant que la taille du message n'est pas un multiple de r
    fonction de bourrage
fin

// Boucle principale
tant que la sortie est inférieur à N bit (= 256)

    // On entre les données dans A avec XOR
    fonction éponge

    // On permute les bits pour générer de l'entropie
    fonction de permutation
        tant que i est inférieur à 12+2l
            fonction 1,2,3 et 4
        fin
fin

// Etape condensat
conversion hexadécimal de la sortie
+3 -0

Salut !

Le sujet est vraiment très intéressant, mais je ne pense pas que j'aurais le temps de m'y consacrer, bien que j'ai envie de faire une implémentation en C++… Ca aurait fait de la concurrence à Berdes ;)

D'ailleurs, @Dominus Carnufex, est-ce que l'on peut te piquer l'idée pour la proposer en exercice dans un cours ? (je pense au cours de C++ que je rédige avec informaticienzero, Akulen et paolo10) C'est vraiment un très bon exercice.

Merci d'avance :)

+0 -0

Le pourquoi du l=6 c'est quand même pour avoir w=64 et donc offrir des optimisations aux systèmes en 64 bits si j'ai bien compris, non ?

Thiht

Oui, c'est pour cette raison qu'ils l'ont choisi.

Je suis un geek, c'est tout. La question "Pourquoi ?" est très importante à mes yeux (surtout quand je ne comprends pas).

A propos, merci pour ton travail. Ce que je trouve dommage dans ton sujet, c'est qu'il y a peu d'effort de vulgarisation. :)

Parce que ce n'est pas son rôle. Même si ça en chagrine certains, ce défi n'est pas un cours sur SHA-3, de la même manière que le Javaquarium n'est pas un tuto sur la reproduction des poissons en captivité. Je me contente de vous donner le minimum indispensable pour que vous puissiez effectivement réaliser le défi. ;)

Lequel, on est bien d'accord, est dur si on essaye de le faire en entier, l'idée étant quand même qu'implémenter tout Keccak représente un défi. D'où les nombreuses pistes pour n'en faire que des morceaux…

Bon voici un pseudo code, est-ce que ça correspond à l'implémentation que tu as pu en faire ?

1
2
3
4
5
// Boucle principale (ou fonction éponge)
tant que le message n'est pas traité

  fonction de bourrage
fin

Yarflam

Le bourrage devrait être à l'extérieur de la boucle, puisqu'on ne l'applique qu'une seule fois au message.

D'ailleurs, @Dominus Carnufex, est-ce que l'on peut te piquer l'idée pour la proposer en exercice dans un cours ? (je pense au cours de C++ que je rédige avec informaticienzero, Akulen et paolo10) C'est vraiment un très bon exercice.

mehdidou99

Bien sûr, je n'ai aucun droit d'auteur sur l'idée de SHA-3. ^^ Si vous voulez reprendre des morceaux du texte in extenso, ils sont sous licence BiPu L, comme toutes mes productions sur ce site.

+0 -0

Même si ça en chagrine certains, ce défi n'est pas un cours sur SHA-3, de la même manière que le Javaquarium n'est pas un tuto sur la reproduction des poissons en captivité.

Sauf que Javaquarium ne demandait pas un algorithme spécifique. On pouvait le développer à sa manière. Ici, l'ordre des opérations ne change pas (ou très peu) - ce n'est pas comparable.

Je ne pense pas que tous les membres de Zds manipulent parfaitement les bits & octets, c'est déjà un défi ! Donc indiquer clairement l'architecture de l'algorithme, me semble un minimum (= le pseudo code que j'ai posté). C'est mon avis ! :)

Merci pour la correction.

+2 -0

Comme promis je poste ma solution développée en C99 pour ce défi, elle se limite au standard SHA-3 (w = 64), tout en gérant toutes les longueurs de hash autorisées (de 32 bits à 768 bits si j'ai bien compté).

Le code se trouve sur github. EDIT nouveau lien, comprend également l'algo Keccak complet maintenant. Le module qui implémente l'algo spécifique SHA-3 est sha3.c

La partie ou j'ai eu le plus de difficulté est le padding, je trouve il n'est pas évident en C de prévoir tous les cas.

Concernant l'optimisation, j'ai rangé dans des tableaux tous les résultats de calculs pouvant l'être particulièrement dans la fonction de permutation (indices de tableaux modulo 5, calcul du 2x+3y).

Le type uint64_t est utilisé afin d'être certain de travailler toujours avec le bon w quelque soit la plateforme.

La solution comprend un programme de test où j'ai laissé tous les cas que j'ai vérifié, notamment ceux du lien fourni par Berdes, que je remercie et félicite pour sa solution complète au passage :)

Concernant les performances, j'ai pu tester sur mon PC windows 32 bits et sur un serveur Linux 64 bits. Sans surprise le programme est plus rapide sur la machine 64 bits : 100,000 itérations de mon programme de test (ce qui correspond à 5,000,000 de condensats générés) prennent 100 secondes en 32 bits, 40 secondes en 64 bits (sans affichage). La machine 32 bits étant plus puissante on peut considérer que le programme s'exécute environ 3 fois plus rapidement en 64 bits.

Voilà si vous avez besoin d'éclaircissement n'hésitez pas, je ne sais pas si j'irai plus loin en implémentant le keccak complet, je trouve que commencer par le SHA-3 uniquement est un bon moyen de comprendre le fonctionnement de l'algorithme dans un 1er temps, sans trop s'embêter avec la "cuisine de bits" sans doute nécessaire pour gérer toutes les longueurs, au moins en C.

EDIT: le résultat de l'exécution du programme de test ci-dessous, le programme demande 2 paramètres sur l'entrée standard:

  • Le nombre d'itérations à exécuter

  • Affichage des résultats ou pas (1/0)

sha3_224(input, 0) = 0x6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7

sha3_256(input, 0) = 0xa7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a

sha3_384(input, 0) = 0x0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004

sha3_512(input, 0) = 0xa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26

sha3_224(input, 5) = 0xffbad5da96bad71789330206dc6768ecaeb1b32dca6b3301489674ab

sha3_256(input, 5) = 0x7b0047cf5a456882363cbf0fb05322cf65f4b7059a46365e830132e3b5d957af

sha3_384(input, 5) = 0x737c9b491885e9bf7428e792741a7bf8dca9653471c3e148473f2c236b6a0a6455eb1dce9f779b4b6b237fef171b1c64

sha3_512(input, 5) = 0xa13e01494114c09800622a70288c432121ce70039d753cadd2e006e4d961cb27544c1481e5814bdceb53be6733d5e099795e5e81918addb058e22a9f24883f37

sha3_224(input, 30) = 0xd666a514cc9dba25ac1ba69ed3930460deaac9851b5f0baab007df3b

sha3_256(input, 30) = 0xc8242fef409e5ae9d1f1c857ae4dc624b92b19809f62aa8c07411c54a078b1d0

sha3_384(input, 30) = 0x955b4dd1be03261bd76f807a7efd432435c417362811b8a50c564e7ee9585e1ac7626dde2fdc030f876196ea267f08c3

sha3_512(input, 30) = 0x9834c05a11e1c5d3da9c740e1c106d9e590a0e530b6f6aaa7830525d075ca5db1bd8a6aa981a28613ac334934a01823cd45f45e49b6d7e6917f2f16778067bab

sha3_224(input, 1600) = 0x9376816aba503f72f96ce7eb65ac095deee3be4bf9bbc2a1cb7e11e0

sha3_256(input, 1600) = 0x79f38adec5c20307a98ef76e8324afbfd46cfd81b22e3973c65fa1bd9de31787

sha3_384(input, 1600) = 0x1881de2ca7e41ef95dc4732b8f5f002b189cc1e42b74168ed1732649ce1dbcdd76197a31fd55ee989f2d7050dd473e8f

sha3_512(input, 1600) = 0xe76dfad22084a8b1467fcf2ffa58361bec7628edf5f3fdc0e4805dc48caeeca81b7c13c30adf52a3659584739a2df46be589c51ca1a4a8416df6545a1ce8ba00

sha3_224(input, 1605) = 0x22d2f7bb0b173fd8c19686f9173166e3ee62738047d7eadd69efb228

sha3_256(input, 1605) = 0x81ee769bed0950862b1ddded2e84aaa6ab7bfdd3ceaa471be31163d40336363c

sha3_384(input, 1605) = 0xa31fdbd8d576551c21fb1191b54bda65b6c5fe97f0f4a69103424b43f7fdb835979fdbeae8b3fe16cb82e587381eb624

sha3_512(input, 1605) = 0xfc4a167ccb31a937d698fde82b04348c9539b28f0c9d3b4505709c03812350e4990e9622974f6e575c47861c0d2e638ccfc2023c365bb60a93f528550698786b

sha3_224(input, 1630) = 0x4e907bb1057861f200a599e9d4f85b02d88453bf5b8ace9ac589134c

sha3_256(input, 1630) = 0x52860aa301214c610d922a6b6cab981ccd06012e54ef689d744021e738b9ed20

sha3_384(input, 1630) = 0x3485d3b280bd384cf4a777844e94678173055d1cbc40c7c2c3833d9ef12345172d6fcd31923bb8795ac81847d3d8855c

sha3_512(input, 1630) = 0xcf9a30ac1f1f6ac0916f9fef1919c595debe2ee80c85421210fdf05f1c6af73aa9cac881d0f91db6d034a2bbadc1cf7fbcb2ecfa9d191d3a5016fb3fad8709c9

sha3_224(input144bytes, 1148) = 0x0d25fb038b41fe5ded2a50fdc623b26361fba33752d49e0beab61df3

sha3_224(input144bytes, 1149) = 0x7f35642872c1cd78349cefa3586dc6fb879501b53498a3f4af87ddc6

sha3(input15bytes, 120, 32) = 0x03b2d62a

sha3(input15bytes, 120, 64) = 0xa832b05580742996

sha3(input15bytes, 120, 96) = 0xd13dfca55b13ea2ea2665bff

sha3(input15bytes, 120, 128) = 0x4468f971d0f8f5773ff120e8482975dd

sha3(input15bytes, 120, 160) = 0xc5cadd7bceaacaa8f321632f94852901e02dd62b

sha3(input15bytes, 120, 192) = 0x48d0ae3096d818d8c204a74718724ef30e1ca61197e8d02e

sha3(input15bytes, 120, 224) = 0x3c8cfdf64a7db27d94c6d10065a183adc6357cdeed44b5280257bf2a

sha3(input15bytes, 120, 256) = 0xc992f4822cb6f934a17332bfb4611d4ada61b918346fa3e36fe373c40267d88d

sha3(input15bytes, 120, 288) = 0x5dcbcf3a2cefa21b21ae737ad6aa60321f9e7aa176e3910706c28405440d97e96bf3082a

sha3(input15bytes, 120, 320) = 0x43c9a4d2e7dde13271de29090900a9c60f148492395711b52d80867b8f77223e3defb4db7e1b2557

sha3(input15bytes, 120, 352) = 0xabdaf7731527a720731a42fbdf45ff80efa102030e7ac5a0ab7b506b9a64b4b8ea1b5e58a2cb59ebc36432c5

sha3(input15bytes, 120, 384) = 0x88e0ae21aa176bcc5c368b7157ba3e414d9ab7498e3004d383eac02ab0532028cca3d65de1892fecde09825c22c2acd2

sha3(input15bytes, 120, 416) = 0x6f4c7be624393c505de40a5e950d3b76fb5c29ff1f9ebdff3d1b4b14daf60093cfdb3d0cfabcadbc35b9a9c44807e9ca55cb7199

sha3(input15bytes, 120, 448) = 0x3ee18af7628289c8ea26e7d295f895465672201e4953180419c65f3a89c606d642ec9f3f54d8a75e4357cf74a62bd7ba9080454ec121a971

sha3(input15bytes, 120, 480) = 0x0b11119ff41b9bb8fecb0df4b40527b4358209844ca04a79903291ce488ffaecc3fedca2a2d3c06d97eb6820c1386c4305835e9cc8bad9f34056feb0

sha3(input15bytes, 120, 512) = 0x05c93a31acc7eb849b99df7ea3d28fcfbe4e18b3b3ef32c83c17244467e5f74d75746ece424e6df0e9f27af3874a449f6321a39f99d7c2ac707870fca1f2bf4a

sha3(input15bytes, 120, 544) = 0x68e26d4edb8ce51e7da3a6b9d8d0efb7ca09009de7af8a870e7eaf5df6396709bac285c3a3fd210bdd3eeb3c15289f8c05a048d8a36c1c2c0c065c0363e5d6b61b1df851

sha3(input15bytes, 120, 576) = 0x7266f94c245c82391eea15c0a3664f450070cabf05eeb739da50d42e51da1d6236a727f33d4ac1311b9ee9cf7eb3a05ca82f183cc866db132d155f728cc948d25181e93aec9a15cc

sha3(input15bytes, 120, 608) = 0x6247b5f8c9b51c023ea1d87eb4dc3955b48cc0d579c1edd8b9eb946b803cee7544ab7f0e92165d6be84940d7b3cec5d3e80c9aa32934dc3f6df1685f79b9e50e4a653eee6d9a41a3848ce967

sha3(input15bytes, 120, 640) = 0x9b2f1c62834cb2233cc5797a2bc2a2e2f022e3333c7e0622c0ca02b0b6670f66a32af30a3c23b809a7cc2e09bdd2f4110e3f942764d7006c642fc0cca61b79ecf13dd28d6c3f6f6870397e7ecb6b7903

sha3(input15bytes, 120, 672) = 0xc4ff3f065edc3febb0775d3122df345390e220ffc9fb359d3d4071fa34613305e6a463bbf4561acab9e3abeef4c4c7ce3fa6eccc31d24bf5674f523a18e1125c47094fb3fab8d89b97a407d660ad214f3a55a20f

sha3(input15bytes, 120, 704) = 0xa4e634309c57582cc0b3b8d32f240f5217d693f4576bbd246da5ca461f1aec1211368f7fcaaf9c908344ac120b0ee7dca5f56960ce3d54c490643e95622f221a1a362113836848c25f5297069804e914a3b6d90239f3857c

sha3(input15bytes, 120, 736) = 0x25b7b2a599ea89788c2407ced05eef87edb0edd2645e390446c8ea21729d2d02f3543fe573227fc6e9615e081c0314d10b72e3dead9769ff2f2be1f703cd5a004c77c5f330716379ed041b5ecca50d6c86c69a93b36b76b6b2903bda

sha3(input15bytes, 120, 768) = 0xfa1c060700736e74a02b4a5c3bc8f2a10c3cf96e99f3532f828c217a63e4b98429ebe653665d6e7fa2b9aff7aed86e2d93795367be0acbb9d4de4744948371250c9867b34db43839745b9360ede95605b55f200b5e4ebfc3d744b2d200129d83

+0 -0

@Yarflam : Je me permets de mettre mon grain de sel. Si tu ne veux pas que ce soit compliqué, ne fais pas de défis. Un défi n'a aucun intérêt si on te dit tout dès le début. De plus, la programmation, c'est dur. Surtout lorsqu'on travaille sur un projet qui doit respecter une norme, les normes étant des textes assez indigestes ; alors, étant donné que dans un vrai projet, tu dois te taper la norme en entier, c'est déjà un défi plus facile que ce qui se fait en réalité.

Alors tu ne peux pas critiquer un défi pour sa difficulté… D'autant plus que de ce que j'ai lu, les explications de @Dominus Carnufex sont assez complètes et claires pour qu'il n'y ait pas de problèmes de compréhension.

+2 -4

@mehdidou99 : L'idée c'est aussi que le lecteur apprenne des choses durant le défi, et chacun peut comprendre plus ou moins facilement les explications données. Il n'y a pas de lots à gagner ou de classement à la fin, les participants font ça pour enrichir leurs connaissances, et les défis ne s'adressent pas forcément à des professionnels ou des étudiants.

J'ai commencé à travailler sur cette fonction de hachage au moment où elle a été postée, mais j'ai été assez découragé par les phrases ambigues à partir de la fonction d'éponge. Du coup j'ai mis mon code de côté en attendant de voir comment les autres comprennent les indications, et pour le moment je n'ai que la fonction de permutation. D'autant qu'apparemment, je suis pas le seul à penser que certaines parties ne sont pas très claires et mériteraient plus d'explications.

Donc dire "ça devrait être dur, là c'est déjà trop facile", je suis pas d'accord.

@Dominus Carnufex : J'ai pas bien compris ta réponse à Yarflam. Peut être que tu étais fatigué ou pas trop d'humeur, mais je la trouve vachement agressive. Il a pas bien compris l'énoncé mais est intéressé et va chercher d'autres sources pour essayer de comprendre, et tu lui explique qu'il a tort et que tes explications devraient être suffisantes. Je veux bien croire que la norme est incroyablement compliquée comparée à ce que tu nous offres, mais visiblement, il y a certaines choses qui ne sont pas forcément claires pour tout le monde. C'est dommage, le sujet est réellement intéressant.

EDIT : Des résultats attendus pour les fonctions intermédiaires serait un réel ajout à l'énoncé et permettrait de tester son code au fur et à mesure et d'être certain de ne pas être à côté de la plaque.

EDIT : Des résultats attendus pour les fonctions intermédiaires serait un réel ajout à l'énoncé et permettrait de tester son code au fur et à mesure et d'être certain de ne pas être à côté de la plaque.

Ayant fait un bout, mais pas tout, je ne peux qu'approuver ceci. :)

+6 -0

Il y a un jeu de test ici - Tableau FIPS 202 - avec le résultat attendu à chaque étape, lien donné par Berdes qui pour ma part m'a bien servi dans les tests.

  • "state" correspond à la matrice A
  • "data to be absorbed" correspond à l'entrée déjà "rembourrée".
+2 -0

@Bibibye : Je n'ai pas dit que c'était "déjà trop facile", mais que c'est plus facile que la réalité. Et j'ai surtout dit que l'on ne peut pas critiquer un défi pour sa difficulté, car c'est un défi. S'il n'est pas adapté au niveau de certains, ils ne peuvent pas le critiquer "parce qu'il est trop dur". Ils peuvent juste essayer de le réaliser avec leurs capacités, et s'arrêter lorsque ça devient vraiment trop dur (à la limite demander de l'aide, mais sans critiquer parce que "c'est trop dur".

+2 -1

@Bibibye : Je n'ai pas dit que c'était "déjà trop facile", mais que c'est plus facile que la réalité. Et j'ai surtout dit que l'on ne peut pas critiquer un défi pour sa difficulté, car c'est un défi. S'il n'est pas adapté au niveau de certains, ils ne peuvent pas le critiquer "parce qu'il est trop dur". Ils peuvent juste essayer de le réaliser avec leurs capacités, et s'arrêter lorsque ça devient vraiment trop dur (à la limite demander de l'aide, mais sans critiquer parce que "c'est trop dur".

mehdidou99

Je n'ai jamais dit que c'était trop dur. Le défi est tout à fait à mon échelle de compétence. C'est la structure de l'algorithme (avec son explication) qui est beaucoup plus difficile à assimiler.

Par ailleurs, je suis en train de développer l'algorithme en Python. Les explications de Dominus Carnufex m'ont aidé et mon code devrait paraître d'ici quelques temps. :)

+1 -0

Sans vouloir être trop critique et dénigrer le travail fait, ce défi me laisse une impression étrange.

En arrivant sur Sdz je pensais que le site se voulait une sorte de site du zéro2, c'est à dire un site pour le partage des connaissances, adapté aux débutants et basé sur une structure associative pour le protéger de dérives commerciales. Un super projet quoi.

En pratique j'ai l'impression que le site ressemble plus à l'association des potes de la fac de science qui partagent leurs connaissances entre eux (je caricature).

Je veux dire par là que très peu de choses sont faites pour le débutant et que la plupart des ressources sont difficilement accessibles car trop pointues/spécialisés ou demandant un niveau de prérequis important.

Je pensais que les défis de Clem étaient des défis qui se voulaient accessibles à tous sans nécessairement plus de prérequis qu'un niveau bac ou quelque chose du genre. Je me disais "cool je vais participer". Je me rends compte que même là, bien que Clem soit la mascotte du site, le contenu est réservé à ceux qui ont un bon niveau en algorithmique et qui doivent être plus ou moins professionnels de l'informatique. Moi en temps qu'étudiant en économie et web développeur amateur, je me sens complétement incapable de réussir ce défi même si j'en comprends le sens (j'imagine qu'une personne qui n'a pas une certaine culture informatique s’enfuie en courant dés la première ligne…^^).

Je comprends que ce genre de défi soit cool pour certains membres, mais n'ont pas plutôt leurs places dans le forum où dans une section particulière (quitte à ce que Clem indique l’existence du défi) ? Les défis de Clem ne devraient pas être l’occasion de rassembler l'ensemble de la communauté sans distinction, au lieu d'être un concours d'entre soi (ici entre programmeurs?).

J'ai parfois plus l'impression d'être sur un site réservé à des bac+3 en info que sur un site qui veut promouvoir le partage de la connaissance pour tous… et je trouve ça un peu dommage (le sdz n'existe plus, OC est commercial et zds est un site élitiste en pratique). Je suis le seul à pensez ainsi ?

+7 -1

Alors on va éviter de polluer ce sujet avec un débat qui peut certainement s'avérer intéressant mais n'a pas sa place ici. Si tu comptes t'en tenir à une critique des Défis de Clem, je t'invite à reposter ton message dans le sujet adéquat. Si, comme ton message le laisse penser, tu veux lancer un débat plus global sur le contenu de ZdS, je t'invite à créer un nouveau sujet dans le Bar à Smoothies et à y déplacer ton message.

Merci !

+3 -0

Voilà c'est fait ici pour ceux qui veulent s'écharper discuter dans la joie et la bonne humeur !

Promis je ne pollue plus ce topic, je m'en vais :p

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte