1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 043 : İmza Doğrulama

🧵 #100GündeSolidity 043 : İmza Doğrulama
İmza Doğrulama: Akıllı Sözleşmelerde Güvenli İşlemler için Adımlar
0

İmza Doğrulama: Akıllı Sözleşmelerde Güvenli İşlemler için Adımlar

Günümüzde, verilerin güvenliği büyük önem taşımaktadır ve bu konuda birçok farklı yöntem kullanılmaktadır. Bunlardan biri de Signature kullanarak veri güvenliğini sağlamaktır. Signature, bir mesajın doğruluğunu kanıtlamak için kullanılan bir tekniktir. Mesajın alıcısı, mesajın Signature’ını kullanarak mesajın kim tarafından gönderildiğini ve mesajın orijinal olduğunu doğrulayabilir.

Bu teknik, blockchain teknolojisi ile birleştirildiğinde, off-chain Signature kullanılarak mesajlar imzalanabilir ve bu imzalar on-chain’de bir Smart Contract kullanılarak doğrulanabilir. Bu da verilerin güvenliğini sağlamak için önemli bir araçtır.

Bu yazıda, Signature kullanımı hakkında detaylı bir açıklama yapacağız ve özellikle Smart Contract’larla Signature doğrulama sürecini ele alacağız. Bunun yanı sıra, Signature doğrulamanın önemi ve faydaları hakkında da bilgi vereceğiz.

Signature nedir?

Signature, bir mesajın doğruluğunu kanıtlamak için kullanılan bir tekniktir. Bu teknik, bir mesajın göndericisinin kimliğini doğrulamak için kullanılır. Bir Signature, mesajın özetini kullanarak oluşturulur ve bu özet, mesajın tamamını içerir. Bir Signature’ın özelliği, herhangi bir değişiklik olmadığı sürece aynı kalmasıdır. Bu nedenle, mesajın değiştirilmediğini doğrulamak için Signature kullanılabilir.

Signature kullanarak, bir mesajın göndericisi kim olursa olsun, mesajın orijinal olduğu ve değiştirilmediği kanıtlanabilir. Signature, özellikle finansal işlemler ve dijital imza işlemleri gibi güvenliği önem arz eden işlemlerde kullanılır. Blockchain teknolojisi, Signature teknolojisi ile birleştirilerek, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması sağlanır.

Blockchain ve Signature kullanımı

Blockchain teknolojisi, dağıtık bir yapıya sahip olduğu için, güvenliği ve doğrulanabilirliği artıran birçok farklı kullanım alanı sunar. Signature teknolojisi de blockchain teknolojisi ile birleştirilerek, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması sağlanır. Bu nedenle, blockchain ve Signature kullanımı birbirleriyle doğrudan ilişkilidir.

Blockchain’deki Signature kullanımı, mesajların doğrulanması için kullanılan Signature’ın, hash fonksiyonları yardımıyla oluşturulması ile gerçekleştirilir. Hash fonksiyonları, bir mesajın özetini oluşturur ve bu özet, mesajın tamamını içerir. Signature, mesajın özetini kullanarak oluşturulur ve bu özet, mesajın tamamını içerir. Böylece, Signature’ın doğruluğu, mesajın orijinalliğini ve bütünlüğünü koruyarak, blockchain üzerinde güvenli bir şekilde doğrulanabilir.

Özellikle, blockchain tabanlı kripto para birimleri gibi finansal işlemlerde Signature teknolojisi, işlemlerin doğrulanması için önemli bir araçtır. Blockchain tabanlı kripto para birimlerinde, işlemler blok zinciri üzerinde kaydedilir ve her bir işlem için bir Signature kullanılır. Bu Signature’lar, işlemlerin doğrulanması için kullanılarak, işlem güvenliği ve doğrulanabilirliği artırılır.

Off-chain Signature

Off-chain Signature, bir mesajın Signature’ının oluşturulması ve doğrulanması için blockchain dışında bir yerde gerçekleştirilmesidir. Bu, mesajın blockchain’e yazılmadan önce doğrulanması anlamına gelir.

Off-chain Signature, özellikle büyük veri dosyalarının veya yüksek frekanslı işlemlerin doğrulanması gibi durumlarda kullanışlıdır. Çünkü bu durumlarda, blockchain üzerinde doğrulama işlemi çok zaman alabilir ve işlemler yavaşlayabilir. Off-chain Signature kullanıldığında, Signature’lar blockchain’e yazılmadan önce oluşturulabilir ve doğrulanabilir. Böylece, işlemlerin hızı artırılır ve blockchain üzerindeki işlem sayısı azaltılır.

Off-chain Signature kullanımı, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması için önemli bir araçtır. Özellikle, blockchain teknolojisi ile birleştirildiğinde, işlemlerin güvenliği artırılır ve işlem süreçleri hızlandırılır. Off-chain Signature, akıllı sözleşmelerde kullanıldığında, sözleşmelerin daha karmaşık işlemleri gerçekleştirmesine de olanak tanır.

On-chain Signature

On-chain Signature, bir mesajın Signature’ının oluşturulması ve doğrulanması için blockchain üzerinde gerçekleştirilmesidir. Bu, mesajın blockchain’e yazıldıktan sonra doğrulanması anlamına gelir.

On-chain Signature, blockchain teknolojisi ile birleştirildiğinde, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması için önemli bir araçtır. Özellikle, blockchain tabanlı kripto para birimleri gibi finansal işlemlerde Signature teknolojisi, işlemlerin doğrulanması için kullanılır. Bu Signature’lar, işlemlerin blockchain üzerinde kaydedilmesiyle birlikte işlemin güvenliği ve doğrulanabilirliği artırılır.

On-chain Signature kullanımı, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması için büyük bir güvence sağlar. Çünkü işlemler blockchain üzerinde gerçekleştirilir ve herhangi bir değişiklik yapılmadığı sürece, işlemin bütünlüğü korunur. Bu nedenle, blockchain üzerinde doğrulama işlemi, işlem güvenliği açısından büyük bir önem taşır.

Özellikle, akıllı sözleşmelerde On-chain Signature kullanımı, sözleşmelerin daha karmaşık işlemleri gerçekleştirmesine olanak tanır. Bu sayede, akıllı sözleşmelerde gerçekleştirilen işlemler daha güvenli ve doğrulanabilir hale gelir.

Smart Contract’larla Signature doğrulama

Smart Contract’lar, blockchain teknolojisi ile birleştirilerek, belirli koşulların yerine getirilmesi halinde otomatik olarak tetiklenen işlemleri gerçekleştirmek üzere tasarlanmıştır. Smart Contract’lar, birçok farklı işlemi gerçekleştirebilir, bunlardan biri de Signature doğrulamadır.

Smart Contract’larla Signature doğrulama işlemi şu şekilde gerçekleştirilir:

  1. İlk olarak, mesajın Signature’ı, off-chain olarak oluşturulur ve elde edilen hash değeri, smart contract’a gönderilir.
  2. Smart Contract, gönderilen hash değerini saklar ve ilgili mesajı doğrulamak isteyen kullanıcının kimliğini doğrular.
  3. Kullanıcı, mesajı doğrulamak istediğinde, off-chain olarak imzalı mesajı hash değerine dönüştürür ve bu hash değerini Smart Contract’a gönderir.
  4. Smart Contract, gönderilen hash değerini sakladığı hash değeriyle karşılaştırır. Eğer iki değer eşleşirse, mesajın doğruluğu onaylanır ve Smart Contract, gerekli işlemleri gerçekleştirir.

Bu şekilde, Smart Contract’larla Signature doğrulama işlemi, mesajların güvenli bir şekilde doğrulanması için büyük bir güvence sağlar. Smart Contract’lar, işlemlerin tamamen otomatikleştirilmesine olanak tanır ve işlem güvenliği açısından büyük bir önem taşır.

Signature doğrulama süreci

Signature doğrulama süreci, bir mesajın imzalı olduğunu ve imzanın doğruluğunu onaylamak için gerçekleştirilen işlemlerin bütünüdür. Bu süreç, bir mesajın güvenli bir şekilde gönderilmesi ve doğrulanması için önemlidir.

Signature doğrulama süreci aşağıdaki adımlardan oluşur:

  1. İlk adım, mesajın imzalanmasıdır. Mesajın göndericisi, mesajın hash değerini oluşturarak mesajın imzasını oluşturur. Bu imza, mesajın doğruluğunu onaylamak için kullanılacak anahtarlarla oluşturulur.
  2. İmzalı mesaj, mesajın alıcısına güvenli bir şekilde iletilir.
  3. Alıcı, imzalı mesajı hash değerine dönüştürür ve bu hash değerini, mesajın imzalı olduğunu onaylayacak olan anahtarlarla birlikte kullanarak imzanın doğruluğunu kontrol eder.
  4. Eğer imzanın doğruluğu onaylanırsa, mesajın bütünlüğü ve güvenliği onaylanmış olur. Mesajın alıcısı, mesajın güvenli bir şekilde gönderildiğine ve göndericinin kimliğinin doğrulandığına emin olabilir.

Signature doğrulama süreci, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması için önemlidir. Bu süreç, mesajların bütünlüğünü ve güvenliğini koruyarak, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlar.

Doğrulama işleminin önemi ve faydaları

Signature doğrulama işlemi, bir mesajın güvenli bir şekilde gönderilmesi ve doğrulanması için büyük bir önem taşır. Bu işlem, mesajın bütünlüğünü ve güvenliğini koruyarak, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlar. Signature doğrulama işleminin önemi ve faydaları şu şekildedir:

  1. Güvenlik: Signature doğrulama işlemi, mesajların güvenli bir şekilde gönderilmesini sağlar. Bu işlem, mesajın bütünlüğünü ve güvenliğini korur ve mesajların izinsiz değiştirilmesini engeller.
  2. İşlem güvenliği: Signature doğrulama işlemi, Smart Contract’larla birlikte kullanıldığında, işlem güvenliğini sağlar. Smart Contract’lar, işlemlerin tamamen otomatikleştirilmesine olanak tanır ve işlem güvenliği açısından büyük bir önem taşır.
  3. Kimlik doğrulama: Signature doğrulama işlemi, mesajların alıcısının kimliğinin doğrulanmasını sağlar. Bu işlem, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlar.
  4. Veri bütünlüğü: Signature doğrulama işlemi, veri bütünlüğünü korur. Bu işlem, mesajların izinsiz değiştirilmesini engeller ve mesajların doğruluğunu onaylar.
  5. Hukuki koruma: Signature doğrulama işlemi, hukuki koruma sağlar. Bu işlem, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlayarak, hukuki bir anlaşmanın kanıtı olarak kullanılabilir.

Signature doğrulama işlemi, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlayarak, işlem güvenliği, kimlik doğrulama, veri bütünlüğü ve hukuki koruma gibi faydalar sağlar. Bu işlem, blockchain teknolojisiyle birleştirildiğinde, mesajların güvenli bir şekilde gönderilmesi ve doğrulanması için büyük bir güvence sağlar.

Örnek kullanım senaryoları

Signature doğrulama işlemi, birçok farklı kullanım senaryosunda kullanılabilir. İşte birkaç örnek:

  1. Bankacılık: Bankalar, müşterilerin kimlik doğrulama işlemleri için signature doğrulama işlemi kullanabilirler. Bu işlem, müşterilerin kimliklerinin doğruluğunu onaylar ve bankaların müşterilerine güvenli bir şekilde hizmet sunmasını sağlar.
  2. Elektronik imza: Signature doğrulama işlemi, elektronik imzalama işlemlerinde de kullanılabilir. Bu işlem, belgelerin güvenli bir şekilde imzalanmasını ve doğrulanmasını sağlar.
  3. Akıllı sözleşmeler: Signature doğrulama işlemi, akıllı sözleşmelerin doğrulanması için de kullanılabilir. Bu işlem, sözleşmelerin taraflarının kimliklerinin doğrulanmasını sağlar ve sözleşmelerin tamamen otomatikleştirilmesini sağlar.
  4. İletişim: Signature doğrulama işlemi, iletişim uygulamalarında da kullanılabilir. Bu işlem, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlar.
  5. Oy kullanımı: Signature doğrulama işlemi, seçimlerde oy kullanımı için de kullanılabilir. Bu işlem, seçmenlerin kimliklerinin doğrulanmasını sağlar ve seçimlerin güvenli bir şekilde gerçekleştirilmesini sağlar.

Yukarıdaki örnekler, signature doğrulama işleminin birçok farklı kullanım senaryosunda kullanılabileceğini gösterir. Bu işlem, mesajların güvenli bir şekilde gönderilmesini ve doğrulanmasını sağlar ve birçok farklı endüstride güvenliğin artırılmasına yardımcı olabilir.

Akıllı Sözleşme Örneklemi

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/* Signature Verification

How to Sign and Verify
# Signing
1. Create message to sign
2. Hash the message
3. Sign the hash (off chain, keep your private key secret)

# Verify
1. Recreate hash from the original message
2. Recover signer from signature and hash
3. Compare recovered signer to claimed signer
*/

contract VerifySignature {
    /* 1. Unlock MetaMask account
    ethereum.enable()
    */

    /* 2. Get message hash to sign
    getMessageHash(
        0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C,
        123,
        "coffee and donuts",
        1
    )

    hash = "0xcf36ac4f97dc10d91fc2cbb20d718e94a8cbfe0f82eaedc6a4aa38946fb797cd"
    */
    function getMessageHash(
        address _to,
        uint _amount,
        string memory _message,
        uint _nonce
    ) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(_to, _amount, _message, _nonce));
    }

    /* 3. Sign message hash
    # using browser
    account = "copy paste account of signer here"
    ethereum.request({ method: "personal_sign", params: [account, hash]}).then(console.log)

    # using web3
    web3.personal.sign(hash, web3.eth.defaultAccount, console.log)

    Signature will be different for different accounts
    0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b
    */
    function getEthSignedMessageHash(
        bytes32 _messageHash
    ) public pure returns (bytes32) {
        /*
        Signature is produced by signing a keccak256 hash with the following format:
        "\x19Ethereum Signed Message\n" + len(msg) + msg
        */
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
            );
    }

    /* 4. Verify signature
    signer = 0xB273216C05A8c0D4F0a4Dd0d7Bae1D2EfFE636dd
    to = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C
    amount = 123
    message = "coffee and donuts"
    nonce = 1
    signature =
        0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b
    */
    function verify(
        address _signer,
        address _to,
        uint _amount,
        string memory _message,
        uint _nonce,
        bytes memory signature
    ) public pure returns (bool) {
        bytes32 messageHash = getMessageHash(_to, _amount, _message, _nonce);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);

        return recoverSigner(ethSignedMessageHash, signature) == _signer;
    }

    function recoverSigner(
        bytes32 _ethSignedMessageHash,
        bytes memory _signature
    ) public pure returns (address) {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);

        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(
        bytes memory sig
    ) public pure returns (bytes32 r, bytes32 s, uint8 v) {
        require(sig.length == 65, "invalid signature length");

        assembly {
            /*
            First 32 bytes stores the length of the signature

            add(sig, 32) = pointer of sig + 32
            effectively, skips first 32 bytes of signature

            mload(p) loads next 32 bytes starting at the memory address p into memory
            */

            // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
            // second 32 bytes
            s := mload(add(sig, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        // implicitly return (r, s, v)
    }
}

Bu akıllı sözleşme, Ethereum blok zinciri üzerinde, bir mesajın doğruluğunu belirlemek için imza doğrulama işlemlerini gösterir.

Sözleşme, bir mesajın hash’ini almak, bu hash’i imzalamak, imzayı doğrulamak ve son olarak imzanın doğru olduğunu onaylamak için gereken fonksiyonları içerir. Bu sürecin işleyişi sözleşmenin açıklamasında belirtilmiştir.

Sözleşme, “getMessageHash” fonksiyonu aracılığıyla mesajın hash’ini hesaplar. Bu fonksiyon, mesajın parametrelerini alır, bunları birleştirir ve ardından “keccak256” fonksiyonu ile hash’ler.

Daha sonra “getEthSignedMessageHash” fonksiyonu, Ethereum tarafından kullanılan bir imza biçimindeki hash’i oluşturur. Bu fonksiyon, önce “\x19Ethereum Signed Message:\n32” dizesini ve ardından mesajın hash’ini içeren bir dizeyi kodlar ve son olarak bu dizeyi “keccak256” fonksiyonu ile hash’ler.

Son olarak, “verify” fonksiyonu, doğru bir şekilde imzalanmış bir mesajın imzasını doğrular. Bu fonksiyon, mesajın hash’ini alır, Ethereum imza formatındaki hash’ini oluşturur ve sonra “recoverSigner” fonksiyonu ile imzalayan kişinin Ethereum hesap adresini geri döndürür. Ardından, bu adres ile istenen adres arasındaki eşleşmeyi kontrol ederek imzanın doğruluğunu belirler.

Bu akıllı sözleşme, imzalı mesajların kimlik doğrulama gibi senaryolarda kullanılabilir. Örneğin, bir platformda bir kullanıcının hesap oluşturmasına izin vermeden önce, kullanıcının bir belgeyi imzalaması ve imzanın doğru olduğunu onaylamak için bu sözleşme kullanılabilir. Ayrıca, diğer Ethereum tabanlı uygulamalarda da kullanılabilir, örneğin, bir kullanıcının bir işlemi onaylaması gerektiğinde kullanılabilir.

SONUÇ BAĞLAMI

Bu çalışmada, blockchain teknolojisi ve akıllı sözleşmeler hakkında genel bir bilgi edindik. Blockchain teknolojisinin temel özelliklerini, kullanım alanlarını, farklı türlerini ve blockchain teknolojisindeki zorlukları öğrendik. Akıllı sözleşmelerin ne olduğunu, nasıl çalıştıklarını, avantajlarını, dezavantajlarını ve kullanım senaryolarını inceledik.

Ayrıca, Solidity programlama dilini kullanarak bir akıllı sözleşme örneği olan Signature Verification’u inceledik. Bu akıllı sözleşme, imza doğrulama işlemini gerçekleştiren basit bir örnektir. Akıllı sözleşmenin kodunu adım adım inceleyerek, nasıl çalıştığını ve ne gibi fonksiyonlar içerdiğini öğrendik.

Sonuç olarak, blockchain teknolojisi ve akıllı sözleşmeler, gelecekte birçok alanda kullanılabilecek önemli teknolojilerdir. Bu teknolojilerin daha yaygın hale gelmesiyle birlikte, daha fazla uygulama ve kullanım senaryosu ortaya çıkacaktır. Bu nedenle, blockchain teknolojisi ve akıllı sözleşmeler hakkında daha fazla araştırma yapmak ve bu teknolojilerin potansiyelini keşfetmek önemlidir.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir