A signed payment can be altered (payee and amount) and still pass signature verification
I maintainer di solito rispondono entro 2 giorni
@aadiitya2007 ci sta già lavorando.
Dal 20/10/2026.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Start with the signing and verification code in the Transaction class: look at Transaction.create, the four-argument constructor, and hasValidSignature(), and check which fields the signature actually covers. Then look at Blockchain.addTransaction and isValid(). Run the Repro.java from the issue against target/classes. Done means the forged payment fails hasValidSignature(), the chain rejects it, and the existing tests still pass. Agree on the signed fields with the maintainer first.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What I did
- Fresh checkout of
main, JDK 17, Maven. mvn compile- Save this as
Repro.javain the project folder:
package minichain;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
public class Repro {
public static void main(String[] args) throws Exception {
KeyPairGenerator g = KeyPairGenerator.getInstance("RSA");
g.initialize(1024);
KeyPair asha = g.generateKeyPair();
Blockchain chain = new Blockchain(2);
chain.minePending("asha"); // asha now has 50 coins
// asha signs a payment of 120 coins to "ravi"
Transaction signed = Transaction.create("asha", "ravi", 120, asha.getPrivate(), asha.getPublic());
// same id, key and signature, but a different payee and amount
Transaction forged = new Transaction(signed.id(), "asha", "ravi1", 20, signed.senderKey(), signed.signature());
System.out.println("signed: " + signed);
System.out.println("forged: " + forged);
System.out.println("signature valid for the forged payment: " + forged.hasValidSignature());
chain.addTransaction(forged);
chain.minePending("m");
System.out.println("chain valid: " + chain.isValid() + ", ravi1 has " + chain.balanceOf("ravi1") + " coins");
}
}
- Compile and run it (use
:instead of;on Linux/macOS):
mkdir out && javac -cp target/classes -d out Repro.java && java -cp "target/classes;out" minichain.Repro
What I expected
The README says: "The system uses digital signatures to prevent forging transactions." (README.md, Note on Security)
A payment whose payee or amount differs from what asha signed should fail hasValidSignature().
What happened instead
signed: asha -> ravi: 120
forged: asha -> ravi1: 20
signature valid for the forged payment: true
chain valid: true, ravi1 has 20 coins
The id, key and signature are all public in the chain.
Environment
main @ 0e92205, JDK 17, Maven 3.9.16, Windows 11.
I'd like to work on the fix for this.
- Lingua principale
- Java
- Stelle
- 0
- Fork
- 3
- Merge medio
- 3g 6h
- PR unite (30g)
- 9
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di techcsispit/mini-chain
-
Blockchain.isValid() does not verify sender balance, allowing blocks with negative balances to pass validationForse già presa @aadiitya2007 l’ha presa 9 giorni fa. Apertabug good first issue
Difficoltà 4/5 1-2 giorni Idoneità per principianti 20/100
techcsispit/mini-chain#37 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
README says changing Block or Transaction makes chain.dat stop loading, but adding a field or method still loads itForse già presa @tanujb03 l’ha presa 28 giorni fa. Apertadocumentation good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 25/100
techcsispit/mini-chain#21 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di techcsispit/mini-chain
Issue simili
-
bug web-ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
jenkinsci/jenkins#27705 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
googleads/googleads-mobile-flutter#1541 ·
I maintainer di solito rispondono entro 4 giorni
-
Keyboard crashes Chrome tabsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
Julow/Unexpected-Keyboard#1490 ·
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
Vakore/ZappierGames#275 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
unitycatalog/unitycatalog#2148 ·
I maintainer di solito rispondono entro 2 giorni