Top
Best
New

Posted by chmaynard 16 hours ago

Looking forward to Git 2.56 – and 3.0(lwn.net)
171 points | 94 commentspage 2
penguin_booze 5 hours ago|
Waiting for 3.0 to land and emancipate us from our 'master's. Bringing about true social change, one SHA at a time.
TacticalCoder 4 hours ago||
So Git, in version 3.0, is moving to SHA-256 by default for SHA-1 ain't considered that strong anymore but...

What about future attacks by quantum computers? Is Git safe from quantum computers for it's all hashes only? Or shall there be issues with quantum attacks?

I'm asking for there are several projects that are already moving to quantum-resistant schemes (like OpenSSH who uses an hybrid scheme [1]).

[1] https://www.openssh.org/pq.html

krior 4 hours ago||
But their post-quantum-algorithm also uses sha256. Afaik only asymetric crypto is in danger from quantum computers.
TacticalCoder 4 hours ago||
Ah it's interesting, AIUI cryptographic hashes are safe from quantum attacks (for there's an infinity of secrets that, once hashed, give a specific hash and hence somehow it's not possible to use a quantum computer to forge what you'd want).

And from the other comment, symmetric cryptography is safe too from QC attacks.

So it's apparently as you wrote: it's really only asymmetric crypto that is at risk.

jcranmer 1 hour ago||
> AIUI cryptographic hashes are safe from quantum attacks (for there's an infinity of secrets that, once hashed, give a specific hash and hence somehow it's not possible to use a quantum computer to forge what you'd want).

Quantum algorithms require some sort of quantum 'trick' to actually have any speedup over classical computers. The most general quantum trick is Grover's algorithm, which lets you find f⁻¹(x) (given f and x) in sqrt(N) queries rather than N queries, where N is the size of the set from which x is drawn. This cuts the bit security of every algorithm in half, although for things like cryptographic hashes, it really means that a second preimage is now only as 'easy' as finding a collision (due to the birthday attack).

The other really well-known quantum trick is QFT, which allows you to find the period of an unknown periodic function really quickly. This is what allows quantum computers to break asymmetric algorithms based on integer factoring or elliptic curves, since they can both be expressed in terms of the QFT.

fnordsensei 4 hours ago|||
As far as I understand, quantum computing can cut it in half, to 128 effective bits. Still way too large to brute force from there.
rainworld 4 hours ago||
At this point, it does not appear that (reasonably strong and modern) symmetric cryptography (ciphers, hash functions, etc.) is realistically threatened by quantum computing: https://words.filippo.io/128-bits/
brookst 4 hours ago|||
Thanks for the great link! This has been vexing me, as intuitively it seems like if quantum computers can test all factors they should be able to test all keys.

But the article helps. Basically Grover’s is not as potent as Shorr’s. And it seems like everyone is convinced there is no dramatically better quantum algorithm than Grover’s?

DannyBee 3 hours ago||
No. Not quite. In fact, that blog post ignores something important from the very papers it cites.

Grover's assumes the function is a black box that you cannot look inside and that your only way of finding a certain result is through repeated invocation.

Under this assumption, Grover's is optimal in the number of invocations of the function required to find the result.

However, this assumption may be quite wrong for AES and friends. It may be the structure allows for non brute force attacks that are totally impractical classically but not subject to Grover's optimality limitation quantumly.

The only thing you are guaranteed here is that if you cannot take advantage of structure at all then Grover's is the best you can do.

Given that we have pretty much always found a way to take some advantage of structure, I would bet we will do so here.

That may or may not make it viable to break at all, I just wouldn't bet that it must be treated like a black box forever.

To me that would be a very bad bet.

brookst 2 hours ago||
Thank you again! That’s exactly what my intuition was reaching for by my expertise was too short to support.

And, if I’m following you, that’s the key difference in Grover’s and Shorr’s: Shorr’s takes advantage of structure?

mitxela 4 hours ago|||
Good point here I had never thought about, but it's still good to upgrade to 256 bits when possible for peace of mind.

This has nothing to do with SHAttered

Razengan 7 hours ago||
I'm still looking for a simple way to "save" a snapshot of my work in git, without all the ceremony of stashing etc
gregoriol 6 hours ago||
What could be simpler than "$ git stash" and "$ git stash pop" ?
m000 6 hours ago|||
Not sure what you are looking for. What's wrong with stash? What ceremony are you referring to? `git stash` - `git stash pop` is as simple as it gets.

Then you can also do `git diff > changes.diff`. Or simply `rsync -avPh repo/ repo.snap/`, if your repo isn't huge. Or consider putting your repo in a filesystem that can do CoW snapshots.

leni536 6 hours ago||
I always just create a branch
everybodyknows 35 minutes ago|||
Even more lightweight is a tag -- 'git-log --all' will list these for you.
moebrowne 5 hours ago|||
I used to do this purely so that I could attach a name, then I found out that you can add a message when stashing: `git stash push -m "trying a thing"`
lucasoshiro 1 hour ago||
Stash is just a stack of commits. If you use stash this way too much probably you will mess something, since it needs to keep that stack data structure.

The solution: create a branch or tag with the things that you're trying. If you want to apply it, use `git merge --squash`. This way your unfinished work lives outside the stash stack!

IshKebab 9 hours ago||
Are they going to fix all the bad defaults in Git 3.0?
onetoo 9 hours ago|
For reference, what would you say those bad defaults are? (I would like to know if I should consider changing my configuration)
iib 9 hours ago|||
There is a post[1] on the gitbutler blog where they collect a subset of defaults that allegedly git core developers use. It's where I got most of my config from.

[1] https://blog.gitbutler.com/how-git-core-devs-configure-git

IshKebab 9 hours ago||||
Here are a few:

1. Git push should default to --force-with-lease --force-if-includes.

2. push.autoSetupRemote should be enabled by default.

3. The default conflict style should be zdiff3.

4. diff.submodule should be 'log' by default (gives much nicer submodule diffs).

5. Submodule updates / clones should be recursive by default. (There is a setting for this but I can't remember it.)

coldpie 2 hours ago|||
> 3. The default conflict style should be zdiff3.

This one always baffled me. The default conflictstyle is so hard to read it's almost useless. Using diff3 is mandatory.

I hadn't heard of zdiff3, I'll give it a shot.

mjmas 2 hours ago|||
Also would be nice:

receive.denyCurrentBranch should be updateInstead by default (or at the very least mentioned in the help message, rather than it recommending ignore or warn or refuse, none of which do what is wanted)

Oxodao 7 hours ago|||
rerere should be on
globular-toast 10 hours ago||
Why am I not surprised that GitHub is dragging its heels on sha256? I assume they just aren't able to change fundamental parts of their system now. So no sha256, no IPv6 etc. They can only sprinkle bits around the edges.
masklinn 8 hours ago||
TFA literally notes that one if the key sha256 devs is a github employee and in favor of the transition.

And sha256 is in private preview at GitHub: https://github.com/bk2204/talk-rust-in-git/blob/dev/presenta...

nickserv 3 hours ago|||
They don't seem to have any problems cramming in ever more AI garbage down our throats.

Priorities!

gotosun1 9 hours ago||
It is on the horizon: https://github.com/bk2204/talk-rust-in-git uses SHA256
drgo 14 hours ago||
[flagged]
coliveira 13 hours ago||
It is regrettable that they're trying to coerce the use of Rust everywhere just for the sake of it. It's a nonsense that is now forced on everyone.
jcranmer 12 hours ago||
The comments gives a link to a recent talk about the motivation for using Rust in Git: https://github.com/bk2204/talk-rust-in-git/blob/dev/presenta...

I wouldn't agree with all of those reasons, but it's very definitely not "just for the sake of it." One of the better reasons so many people look to writing some things in Rust is that we now have pretty ample evidence than trying to write a binary file format parser in C is a cornucopia of CVEs that are just simply absent in Rust, and the excuse of "well, but a sufficiently smart programmer doesn't write bugs in C" doesn't cut it anymore.

coliveira 12 hours ago||
Somehow we have binary file format parsers written in C everywhere, so the real world shows it is possible and we do have programmers capable of doing it.
112233 11 hours ago|||
Somehow we also have memory safety bugs everywhere, too. So real world shows bugs in C code are possible. What even is your argument? Real men write asm?
jcranmer 12 hours ago||||
Sure, we can write a binary file format parser in C. We just can't figure out how to write one that isn't buggy and lets someone infect your computer if you give it sufficiently inventive garbage.
eviks 12 hours ago|||
The issue isn't whether it's possible to have parsers, but whether it's possible to have them be secure, and periodic CVEs "everywhere" suggest we don't
cxr 12 hours ago||
Aside from memory safety, which is solved by using a compiler that just doesn't allow unsafe memory operations (so not GCC or Clang upstream), which CVEs specifically would have been ameliorated by a parser written in Rust instead of C?
eviks 10 hours ago|||
Aside from the fact that it's not solved by using an alternative compiler, why would you put the core advantage aside?
cxr 3 hours ago||
What?
duskwuff 10 hours ago|||
> Aside from memory safety, which is solved by using a compiler that just doesn't allow unsafe memory operations

I don't see how that's possible without turning the language into something that isn't C, either by adding significant new functionality (e.g. fat pointers) or subtracting enough functionality that it's a much less capable language (e.g. disallowing dynamic memory allocation).

hellcow 10 hours ago||
Behold: https://fil-c.org/

An important improvement over rust is that "Fil-C has no unsafe statement."

rpadovani 9 hours ago||
As everything, there are compromises and prices to pay.

In case of fil-c, it is about 1.5-4x slower performance, and a memory overhead.

So, let's not present it as a panacea to all problems: there could good reasons to use it, but it isn't a magic trick.

GoblinSlayer 8 hours ago||
Rust is slower too, and git is IO bound anyway, and routinely calls bash.
insanitybit 2 hours ago||
Rust is not 1.5-4x slower at all. Git is not IO bound at all, it is not saturating your IO device, it just performs IO a lot.
serbuvlad 9 hours ago|||
fwiw, the use of C is infinitely more "coerced" than the use of Rust.

on my Linux system, C takes ownership of a 'top-level' /usr/include directory, all the kernel APIs have their canonical definitions in C headers, a lot of system features like nsswitch require dynamically linked C libraries etc. etc.

Rust is just something that programs can choose to be written in and that doesn't inconvenience me in any way.

tosti 1 hour ago||
It doesn't need to be that way: https://gobolinux.org/at_a_glance.html
epidemian 12 hours ago|||
Of the codebases i know that have adopted Rust, it has always been because some of their maintainers wanted to do so.

Maybe git's case is different though. Do you have more info about it? Are you a git maintainer who was coerced to use Rust, or do you know of such cases?

tombert 12 hours ago|||
I don't think it's "just for the sake of it". I think they believe that the Rust code will be safer.
coliveira 12 hours ago||
If that's the case, they should stop using git and Linux right now, because it's everything written in C. Having 0.1% of the code in a safe language will not change anything, it's only a bad security blanket.
aw1621107 12 hours ago|||
> Having 0.1% of the code in a safe language will not change anything, it's only a bad security blanket.

Just because something does provide an immediate perfect solution does not mean it isn't not worth investigating and/or pursuing.

Also consider that bugs tend to be more prevalent in new code (e.g., [0]) as a result, you are likely to see more of a benefit from writing new code in a memory-safe language than raw line count proportions would indicate.

[0]: https://security.googleblog.com/2024/09/eliminating-memory-s...

nvme0n1p1 12 hours ago||||
You don't believe in slowly and iteratively improving a codebase over time? Should git stick with its weird mishmash of C and perl and shell scripts forever, for tradition's sake, performance and maintainability be damned?
devilsdata 8 hours ago||||
I don't understand your reasoning. Why should they quit git and Linux (and presumably all applications written in C) if they believe Rust is more secure than C?
Joker_vD 7 hours ago||
It's the classic "Yet you participate in society. Curious!" response. You don't get dislike the current state of the world if you exists in it, apparently.
shakow 8 hours ago||||
I hope you don't use seatbelts in your car, as they won't help you against a fire.
baq 9 hours ago|||
Rewriting it all in rust with bug for bug compatibility and byte identical outputs won’t cost more than $100k in tokens, but I don’t think this is an answer you’re looking for
devilsdata 8 hours ago||
Is all use of Rust "coerced" and "forced on everyone", or is there a way to write things in it that makes sense?
eviks 12 hours ago|
> It is a binary file optimized for both space efficiency and quick access. Since then, it has been possible to create a repository that uses a reftable rather than the old file-based mechanism,

Good, are there (m)any other plans to ditch the slow files and use proper database? Or is it only reserved for various post-git competitors?

cesarb 11 hours ago||
> Good, are there (m)any other plans to ditch the slow files and use proper database?

The filesystem is a proper database, just not a relational one.

Linus focused heavily on performance when he wrote git; he used the filesystem because, as the main Linux kernel maintainer, he knew that the Linux VFS and filesystems were fast enough for these use cases.

(It's the use cases that have changed; it was not expected back then to have more than a few hundred refs in a single repository.)

spankalee 10 hours ago|||
There are lots of places it'd be useful to use Git that don't have filesystems.
eviks 10 hours ago|||
> more than a few hundred refs

Ah, yeah, "you're holding it wrong", though use cases haven't changed, it's closer to the expected common case of expectations turning out wildy wrong (Why would you ever expect people to stop NAMING things at scale???)

But also the core property of the filesystem database has always been low performance for a bunch of tiny things

schacon 6 hours ago|||
Yes, Patrick Steinhart (GitLab) has been working not only on reftables and pluggable backends for the references data, but also pluggable backends for object storage, so that you can use any database backend format (sqlite, s3, special large file storage options, etc) to store objects if you want (in addition to loose objects and packfiles).

This is work that Patrick and GitLab have been doing for years now and it's very impressive and nearly complete.

jayd16 1 hour ago||
Not sure if this post is an exhaustive list. Is that stuff making it to 3.0 or further out?
112233 11 hours ago|||
By "proper" I assume you mean relational? Or ACID? Or you mean using existing database software? What is so improper about the way git stores data?
ithkuil 5 hours ago||
It's not just slowness, but what about case insensitive filesystems?