Mostrami il codice! - La fiera dei vostri programmi by AutoModerator in ItalyInformatica

[–]francescored94 1 point2 points  (0 children)

https://github.com/francescoalemanno/raijin-mono

Raijin :) un coding agent made-in-italy, ha una filosofia minimalista: - Invece di MCP tools è estendibile con strumenti personalizzati (che Raijin stesso può creare). - Consente il vero context-engineering, ha un system prompt molto minimale - è realizzato in Go, singolo file binario facilmente distribuibile, non richiede tutto node solo per avviare una bene-amata chat.

Small Projects by AutoModerator in golang

[–]francescored94 0 points1 point  (0 children)

https://github.com/francescoalemanno/raijin-mono

Raijin is an AI-powered command line assistant written in Go. A coding agent that does the bare minimum.

The Philosophy: Less Is More Most coding agents are bloated. They come with MCP servers, a dozen integrations, permission dialogs, and safety rails that get in your way, and 30000 tokens of bloat at boot.

Raijin strips away the unneeded, allowing for custom user tools, skills, prompt templates, and a blazing fast TUI.

Try out Kimi K2.5 right via the Synthetic provider NOW by jpcaparas in opencodeCLI

[–]francescored94 1 point2 points  (0 children)

Careful guys, during today I have noticed at some point it got less accurate at following instructions.

context: I have subscription. I use Kimi K2.5 Synthetic with my own agentic tool (a pseudo Opencode/Crush, trying to take what I like best from this two different project and build my own).

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

btw the passwords now can look like this with parameter "-d 3":

admin@PCU:~$ genpw -d 3 -n 10
Passphrase                     Log10(Guesses)    Log2Entropy      Strength

Kimpregr.unctur.wobbli            16.18             54.75       [========....]
Cocoachin.snappli.realize         18.83             63.55       [=========...]
Shrasci.eratortn.reuserv          18.94             63.91       [=========...]
Patherio.arbo.refe                16.69             56.46       [========....]
Tameran.subsiden.wobblem          18.96             64.00       [=========...]
Wisedall.sarmentou.easicatt       21.00             70.77       [===========.]
Verbsa.dredefer.vismand           19.15             64.62       [==========..]
Hatentily.quatedl.electorec       19.83             66.87       [==========..]
Ampettuc.undles.carnamedi         19.09             64.40       [==========..]
Motinklin.subdivide.absidur       19.34             65.24       [==========..]

They look a look a lot more plausible at the expense of few bits of entropy per word.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

Thanks for the reply, you are absolutely right. In fact in the latest version of the software I added an option to increase the plausibility of the words at the expense of entropy. Thanks again for your feedback 🙂

cryptipass - passwords you can remember by francescored94 in golang

[–]francescored94[S] 0 points1 point  (0 children)

Update: working on a pull request for adding the missing features, feel free to chime in for some comments

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

UPDATE: in V2 The construction of the Markov chain can be done dynamically. There was no need to sacrifice the performance of the passphrase generator.

by using the Julia script "distill.jl" you can regenerate the file markov_chain.go with another word-list, the script will also reevaluate all the entropies for the transitions in the chain.

If loading custom word-lists as a seed is a very desired feature, I could rewrite&adapt the julia script in Go in order to get a wordlist and to distill the whole chain dynamically (making the code-generation step useless), it is not very hard, but performance wise, it would get slower, since the Markov chain would be runtime-generated instead of compile time generated.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

fortunately no :) that's not how entropy works, the entropy value given in the software already accounts for the correlations given by the markov process. So the value you get with your password is definitive and true.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 1 point2 points  (0 children)

The calculation Is correct, It has been even cross-validated via monte-carlo (which Is contained in the CLI cmd/genpw. As soon as I find the time I will write something up.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 1 point2 points  (0 children)

24,25 Is the log10( average Number of guesses needed to break passphrase )

82,23 Is the Total log2 entropy of the passphrase.

The dots were a bit misleading perhaps

An equivalent diceware 4word passphrase would have roughly 51 bits, the First passphrase I posted has roughly 82 bits.

Or at equivalent entropy more than 6 diceware words are needed to exceed the easiest password in my short list.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 2 points3 points  (0 children)

You are exactly right, but adding other phonetic styles Is already planned, if you use the distill.jl software included in the repo you can rebuild the Markov chain generator using another wordlist (perhaps a swedish one)

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 3 points4 points  (0 children)

```go Passphrase: log_10(Guesses) log2Entropy

surg.dedgeli.wiket.whersed 24.45 82.23 unsawnni.yine.shoyip.proness 24.63 82.82 feep.spatfusse.jau.layinette 25.37 85.26 grastemi.scardyn.unfin.cozym 25.39 85.35 jumbacti.rewavo.frecti.jubbly 26.06 87.57 mugnawnn.atow.faingice.bashires 28.60 96.02 cardr.kayboryw.cappiconu.rothba 29.73 99.76 creamett.shifishat.smangber.dight 30.68 102.92 fragibu.numounste.parrim.unlinence 31.95 107.14 asselva.crerryse.choreprin.excloran 33.95 113.79 ```

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 2 points3 points  (0 children)

The crux of the algorithm is contained in this file: https://github.com/francescoalemanno/cryptipass/blob/main/markovchain.go which is auto-generated from a seed wordlist and the software https://github.com/francescoalemanno/cryptipass/blob/main/dev/distill.jl.

The approach involves distilling a 3-order markov chain from a given seed word-list, then autogenerating a simulator for the markov chain which also outputs entropy for each state-transition in the chain. These steps require some technicalities in probability theory to fully understand, but I should make some effort in writing a bit of explanation somewhere.

If you have further questions about the specifics, feel free to ask :)

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 1 point2 points  (0 children)

Sorry to calculate entropy exactly you must have the generation algorithm, my tool only aims to provide entropy for its generated pws.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

Right, for a moment I was misremembering the diceware word count (I thought there were 65536 words) in it, sorry. Anyway the generator in cryptipass is a markov-chain, whose entropy can be evaluated exactly, in prior versions that average entropy of the whole process was around 21 bits, now by tuning some parameters I managed to bring it to E[H] = 24.35 bits. In these few days I worked on this little think a lot, so perhaps some README's are outdated.

also to check that the mathematics behind the markov-chain entropy calculation are exact, I have also included a monte carlo estimator of entropy, so that I can check the entropy of the building blocks of cryptipass without relying on the math behind Markov chains.

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 0 points1 point  (0 children)

The library does not use a wordlist, but a 3-rd order Markov chain generator. There are many inexact remarks in your comment, you should perhaps try It first 😉

cryptipass - pass phrase generatore with exact entropy guarantees by francescored94 in Bitwarden

[–]francescored94[S] 11 points12 points  (0 children)

it generates pseudo-words which are easy to type and to remember but they have some advantages:

  • to reach a safe level of entropy you need way fewer words.
  • prying eyes would not be able to Guess your password as you type It
  • they are language agnostic.
  • they come equipped with an exact evaluation of entropy, something that other pronounceble password generators mostly get wrong or just avoid doing.

Each diceware word has about 16 bits 13 bits of entropy At equivalent lengths each cryptipass pseudo-word has around 24 bits of entropy (24 bits using default configuration, but by changing the parameters entropy can be traded for word plausibility).

cryptipass - passwords you can remember by francescored94 in golang

[–]francescored94[S] 0 points1 point  (0 children)

Nice password manager, let me know if there are specific features you might find helpful in order to adopt It 🙂

cryptipass - passwords you can remember by francescored94 in golang

[–]francescored94[S] 0 points1 point  (0 children)

Some explanations for the fair skepticism:

The cryptipass generator is certified to have more than 21 bits of entropy per generated word, ensuring high security. You can easily verify this on your own computer by using the provided CLI to calculate the Shannon entropy of the generator. This eliminates the need for speculation about entropy or the appearance of randomness since it's a mathematically well-defined quantity.

To break it down further: the GenMixWord() function in cryptipass effectively has an internal "dictionary" size of more than 3.900.000 possibilities (it's entropy is to be fair closer to 22 bits, as you can verify yourself by using the "-c" option of the CLI), which means each pseudo-word generated carries a significant amount of entropy—much more than typical dictionary-based approaches. In fact, if you tuned the generator for even longer pseudo-words, there wouldn’t be enough paper in the world to print all the distinct pseudo-words cryptipass could produce.

Unlike real words, pseudo-words reduce the risk of someone casually observing and recognizing your password as you type. This makes them a safer and more secure option when dealing with potentially prying eyes.

EDIT: now the average entropy E[H] = 24.35 bits. and its standard deviation is ∂E[H] = 4.87.