무결성(Integrity)은 데이터나 정보의 정확성, 완전성, 일관성이 유지되는 것을 의미합니다. 데이터가 변조되거나 손상되는 등의 변경이 없이 그대로 유지되는 것을 말합니다. 블록체인에서 무결성은 블록체인에 저장된 데이터나 트랜잭션이 변경되거나 손상되지 않았음을 검증하는 것을 의미합니다. 이를 통해 블록체인의 신뢰성을 보장할 수 있습니다.
이 코드는 PHP를 사용하여 블록체인의 기본 원리를 구현한 간단한 프로그램입니다. 이 프로그램은 블록체인의 기본 원리를 이해하는 데 도움이 될 수 있습니다.

index = $index;
        $this->timestamp = $timestamp;
        $this->data = $data;
        $this->previous_hash = $previous_hash;
        $this->hash = $this->calculate_hash();
    }

    public function calculate_hash() {
        return hash("sha256", $this->index . $this->timestamp . $this->data . $this->previous_hash);
    }
}

class Blockchain {
    private $chain;

    public function __construct() {
        $this->chain = array(new Block(0, time(), "Genesis Block", "0"));
    }

    public function add_block($data) {
        $index = count($this->chain);
        $previous_hash = $this->chain[$index - 1]->hash;
        $timestamp = time();
        $block = new Block($index, $timestamp, $data, $previous_hash);
        $this->chain[] = $block;
    }

    public function is_valid() {
        for ($i = 1; $i < count($this->chain); $i++) {
            $current_block = $this->chain[$i];
            $previous_block = $this->chain[$i - 1];

            if ($current_block->hash !== $current_block->calculate_hash()) {
                return false;
            }

            if ($current_block->previous_hash !== $previous_block->hash) {
                return false;
            }
        }
        return true;
    }
}

// Sample Usage
$blockchain = new Blockchain();
$blockchain->add_block("Block 1 Data");
$blockchain->add_block("Block 2 Data");

echo "Is Blockchain Valid? " . ($blockchain->is_valid() ? "Yes" : "No") . "\n";

// Tamper with Block 2 Data
$blockchain->chain[2]->data = "Tampered Data";
echo "Is Blockchain Valid? " . ($blockchain->is_valid() ? "Yes" : "No") . "\n";

위 프로그램은 Block 클래스와 Blockchain 클래스를 정의하고, 각각 블록의 구조와 블록체인의 기능을 구현하고 있습니다. 블록체인에 새로운 블록을 추가할 때는 add_block 메소드를 호출하고, 블록체인의 무결성을 검증할 때는 is_valid 메소드를 호출합니다. 위 프로그램을 실행하면 블록체인이 생성되고, 새로운 블록이 추가되며, 마지막으로 블록체인의 무결성이 검증됩니다. 마지막으로, Block 2의 데이터를 변경해 블록체인의 무결성을 위반하는 코드입니다. 블록체인에서는 각 블록이 이전 블록과 링크되어 있어 블록체인을 형성합니다. 따라서 이전 블록의 데이터가 변경되면 이전 블록의 해시 값도 변경됩니다. 그러면 이전 블록과의 연결이 깨져버려 해당 블록부터 이후의 모든 블록이 무효화됩니다.

// Tamper with Block 2 Data
$blockchain->chain[2]->data = "Tampered Data";
echo "Is Blockchain Valid? " . ($blockchain->is_valid() ? "Yes" : "No") . "\n";

 

실행 하기

$blockchain->is_valid() 함수는 현재 블록체인이 유효한지 여부를 판단하기 위해 모든 블록의 무결성을 검사합니다. 이 검사는 체인의 모든 블록이 자신의 해시와 이전 블록의 해시가 맞는지를 검증하며 수행됩니다.

위 코드에서 Tamper with Block 2 Data 부분에서는 블록체인의 무결성을 침해하고 있습니다. 하지만 이는 이미 생성된 블록의 데이터를 변경하고 있는 것일 뿐, 블록체인 자체의 구조를 변경하고 있는 것은 아닙니다.

따라서, Tamper with Block 2 Data 부분은 블록체인의 구조를 변경하는 것은 아니기 때문에, 이전 블록과 현재 블록의 해시값이 변경되지 않았기 때문에 블록체인은 여전히 유효합니다. 즉, is_valid() 함수는 여전히 true를 반환하게 됩니다.