{"id":476304,"date":"2023-08-09T07:28:31","date_gmt":"2023-08-09T07:28:31","guid":{"rendered":""},"modified":"2023-09-05T11:12:26","modified_gmt":"2023-09-05T11:12:26","slug":"code-signing","status":"publish","type":"wiki","link":"https:\/\/oneproxy.pro\/pt\/wiki\/code-signing\/","title":{"rendered":"Assinatura de c\u00f3digo"},"content":{"rendered":"<p>A assinatura de c\u00f3digo \u00e9 um procedimento digital utilizado para certificar que um determinado bloco de c\u00f3digo n\u00e3o foi adulterado e \u00e9 origin\u00e1rio de uma fonte espec\u00edfica. Ele fornece um n\u00edvel adicional de garantia ao verificar a integridade do c\u00f3digo executado em computadores ou baixado da Internet. A assinatura de c\u00f3digo serve para proteger os usu\u00e1rios contra softwares nocivos e malware, confirmando que o software que eles est\u00e3o baixando e instalando \u00e9 genu\u00edno e vem de uma fonte confi\u00e1vel.<\/p>\n<h2>As origens e evolu\u00e7\u00e3o da assinatura de c\u00f3digo<\/h2>\n<p>O in\u00edcio da assinatura de c\u00f3digo remonta aos prim\u00f3rdios da Internet, quando o crescimento das atividades online exigia medidas de seguran\u00e7a aprimoradas. Em meados da d\u00e9cada de 1990, a Netscape, uma das pioneiras na ind\u00fastria de navegadores web, introduziu a assinatura de objetos, que permitia que miniaplicativos Java acessassem certas APIs restritas, um conceito que \u00e9 o antecessor da moderna assinatura de c\u00f3digo.<\/p>\n<p>Em 1996, a Microsoft lan\u00e7ou o Authenticode, sua tecnologia propriet\u00e1ria para assinatura de c\u00f3digo, junto com o Internet Explorer 3.0. Isto representou a primeira grande implementa\u00e7\u00e3o da assinatura de c\u00f3digo num contexto orientado para o consumidor e estabeleceu o modelo de utiliza\u00e7\u00e3o de certificados emitidos por terceiros confi\u00e1veis, ou Autoridades de Certifica\u00e7\u00e3o (CAs), para garantir a identidade do signat\u00e1rio.<\/p>\n<p>Desde ent\u00e3o, a assinatura de c\u00f3digo evoluiu e \u00e9 agora um padr\u00e3o amplamente adotado na ind\u00fastria de software para manter e garantir a integridade e a autenticidade do c\u00f3digo distribu\u00eddo.<\/p>\n<h2>Compreendendo a assinatura de c\u00f3digo em profundidade<\/h2>\n<p>A assinatura de c\u00f3digo envolve o uso de um hash criptogr\u00e1fico para assinar o c\u00f3digo do software. Se o c\u00f3digo for alterado ap\u00f3s ser assinado, a assinatura se tornar\u00e1 inv\u00e1lida. Um certificado de assinatura de c\u00f3digo, emitido por uma Autoridade de Certifica\u00e7\u00e3o (CA) confi\u00e1vel, \u00e9 usado para criar esta assinatura.<\/p>\n<p>Quando um usu\u00e1rio baixa um software assinado, seu sistema verificar\u00e1 a assinatura usando a chave p\u00fablica correspondente \u00e0 chave privada usada para criar a assinatura. Se a assinatura for verificada corretamente, o sistema confiar\u00e1 no software e permitir\u00e1 que ele seja executado.<\/p>\n<h2>O mecanismo interno de assinatura de c\u00f3digo<\/h2>\n<p>A assinatura de c\u00f3digo funciona por meio de um sistema de criptografia de chave p\u00fablica. Aqui est\u00e1 uma an\u00e1lise passo a passo do processo:<\/p>\n<ol>\n<li>Um desenvolvedor escreve o c\u00f3digo do aplicativo.<\/li>\n<li>O desenvolvedor aplica uma fun\u00e7\u00e3o hash ao c\u00f3digo, produzindo um valor hash exclusivo que representa o conte\u00fado do c\u00f3digo.<\/li>\n<li>O desenvolvedor ent\u00e3o usa sua chave privada para criptografar esse valor hash, criando uma assinatura digital.<\/li>\n<li>O desenvolvedor anexa a assinatura digital e sua chave p\u00fablica (incorporada ao certificado) ao aplicativo.<\/li>\n<\/ol>\n<p>Quando um usu\u00e1rio baixa e executa este aplicativo:<\/p>\n<ol>\n<li>O sistema do usu\u00e1rio usa a chave p\u00fablica do desenvolvedor para descriptografar a assinatura digital, revelando o valor original do hash.<\/li>\n<li>O sistema aplica a mesma fun\u00e7\u00e3o hash ao aplicativo baixado, gerando um novo valor hash.<\/li>\n<li>Se o novo valor de hash corresponder ao valor de hash original descriptografado, o sistema conclui que o c\u00f3digo n\u00e3o foi alterado desde que foi assinado e permite sua execu\u00e7\u00e3o.<\/li>\n<\/ol>\n<h2>Principais recursos de assinatura de c\u00f3digo<\/h2>\n<ul>\n<li><strong>Integridade<\/strong>: A assinatura de c\u00f3digo garante que o c\u00f3digo do software n\u00e3o foi alterado ou adulterado desde que foi assinado.<\/li>\n<li><strong>Autentica\u00e7\u00e3o<\/strong>: verifica a identidade do editor do software, aumentando a confian\u00e7a.<\/li>\n<li><strong>N\u00e3o-Rep\u00fadio<\/strong>: o editor n\u00e3o pode negar sua associa\u00e7\u00e3o com o c\u00f3digo depois de assinado.<\/li>\n<li><strong>Carimbo de data e hora<\/strong>: a assinatura inclui um carimbo de data\/hora que indica quando o c\u00f3digo foi assinado.<\/li>\n<\/ul>\n<h2>Tipos de certificados de assinatura de c\u00f3digo<\/h2>\n<p>Geralmente existem dois tipos de certificados de assinatura de c\u00f3digo:<\/p>\n<table>\n<thead>\n<tr>\n<th>Tipo de certificado<\/th>\n<th>Usar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Certificado autoassinado<\/strong><\/td>\n<td>Os desenvolvedores geram seu pr\u00f3prio certificado e o utilizam para assinar seu c\u00f3digo. Este m\u00e9todo geralmente n\u00e3o \u00e9 recomendado para software distribu\u00eddo ao p\u00fablico, pois n\u00e3o h\u00e1 terceiros confi\u00e1veis para garantir a autenticidade do signat\u00e1rio.<\/td>\n<\/tr>\n<tr>\n<td><strong>Certificado de uma CA confi\u00e1vel<\/strong><\/td>\n<td>Os desenvolvedores obt\u00eam um certificado de uma autoridade de certifica\u00e7\u00e3o confi\u00e1vel. A CA verifica a identidade do desenvolvedor antes de emitir o certificado. Este \u00e9 o tipo de certificado de assinatura de c\u00f3digo mais comumente usado e \u00e9 essencial para software distribu\u00eddo publicamente.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Usando assinatura de c\u00f3digo: problemas e solu\u00e7\u00f5es<\/h2>\n<p>A assinatura de c\u00f3digo \u00e9 uma ferramenta poderosa para garantir a integridade e autenticidade do software, mas tem seus desafios:<\/p>\n<p><strong>Problema<\/strong>: A seguran\u00e7a da chave privada \u00e9 cr\u00edtica. Se uma chave privada for roubada, outra pessoa poder\u00e1 assinar o software que parece vir do desenvolvedor original.<\/p>\n<p><strong>Solu\u00e7\u00e3o<\/strong>: os desenvolvedores precisam proteger suas chaves privadas com fortes medidas de seguran\u00e7a, como armazenamento seguro de chaves, criptografia e senhas fortes.<\/p>\n<p><strong>Problema<\/strong>: se o certificado de um desenvolvedor for comprometido e usado para assinar software malicioso, o dano poder\u00e1 ser generalizado e dif\u00edcil de desfazer.<\/p>\n<p><strong>Solu\u00e7\u00e3o<\/strong>: as autoridades de certifica\u00e7\u00e3o possuem processos em vigor para revogar certificados que foram comprometidos. No entanto, isto exige que a AC seja notificada do compromisso em tempo \u00fatil.<\/p>\n<h2>Assinatura de c\u00f3digo: principais caracter\u00edsticas e compara\u00e7\u00e3o com termos semelhantes<\/h2>\n<p>Embora a assinatura de c\u00f3digo compartilhe semelhan\u00e7as com outros conceitos de seguran\u00e7a como SSL\/TLS, existem algumas diferen\u00e7as:<\/p>\n<table>\n<thead>\n<tr>\n<th>Conceito<\/th>\n<th>Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Assinatura de c\u00f3digo<\/strong><\/td>\n<td>Usado para verificar a integridade e a origem de um aplicativo de software ou script. A assinatura de c\u00f3digo garante que um trecho de c\u00f3digo n\u00e3o foi alterado desde que foi assinado.<\/td>\n<\/tr>\n<tr>\n<td><strong>SSL\/TLS<\/strong><\/td>\n<td>Usado para criptografar dados em tr\u00e2nsito entre um cliente (por exemplo, um navegador da web) e um servidor. SSL\/TLS n\u00e3o garante a integridade do software do servidor, mas garante que os dados transmitidos entre o cliente e o servidor n\u00e3o possam ser interceptados ou alterados.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Perspectivas e tecnologias futuras em assinatura de c\u00f3digo<\/h2>\n<p>\u00c0 medida que o cen\u00e1rio tecnol\u00f3gico evolui, o mesmo acontece com a assinatura de c\u00f3digo. As perspectivas futuras sobre assinatura de c\u00f3digo giram em torno do aprimoramento de seus recursos atuais e da adapta\u00e7\u00e3o a novas plataformas e tecnologias.<\/p>\n<p>Uma tend\u00eancia \u00e9 o desenvolvimento de novos padr\u00f5es e pr\u00e1ticas para lidar com a escala e a complexidade da distribui\u00e7\u00e3o de software na era da IoT (Internet das Coisas) e da computa\u00e7\u00e3o em nuvem. Al\u00e9m disso, o maior foco na seguran\u00e7a cibern\u00e9tica pode levar ao desenvolvimento de algoritmos mais sofisticados e robustos para assinatura de c\u00f3digo.<\/p>\n<p>A tecnologia Blockchain tamb\u00e9m apresenta possibilidades interessantes para assinatura de c\u00f3digo descentralizada e transparente, com contratos inteligentes automatizando o processo e tornando-o ainda mais seguro.<\/p>\n<h2>Servidores proxy e assinatura de c\u00f3digo<\/h2>\n<p>Os servidores proxy, como os fornecidos pelo OneProxy, funcionam como intermedi\u00e1rios entre os usu\u00e1rios finais e a Internet. Eles podem fornecer v\u00e1rios benef\u00edcios, incluindo maior anonimato, economia de largura de banda e maior seguran\u00e7a.<\/p>\n<p>Os servidores proxy n\u00e3o interagem diretamente com os processos de assinatura de c\u00f3digo, mas podem aprimorar a camada de seguran\u00e7a de uma rede. Por exemplo, um servidor proxy pode fornecer uma camada adicional de prote\u00e7\u00e3o contra amea\u00e7as externas e, combinado com a assinatura de c\u00f3digo, pode garantir um ambiente online mais seguro e confi\u00e1vel.<\/p>\n<h2>Links Relacionados<\/h2>\n<ol>\n<li>Tecnologia Authenticode da Microsoft: <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/seccrypto\/authenticode\" target=\"_new\" rel=\"noopener nofollow\">https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/seccrypto\/authenticode<\/a><\/li>\n<li>Vis\u00e3o geral da assinatura de c\u00f3digo da GlobalSign: <a href=\"https:\/\/www.globalsign.com\/en\/blog\/what-is-code-signing\/\" target=\"_new\" rel=\"noopener nofollow\">https:\/\/www.globalsign.com\/en\/blog\/what-is-code-signing\/<\/a><\/li>\n<li>Assinatura de c\u00f3digo para novas plataformas: <a href=\"https:\/\/developer.apple.com\/documentation\/security\/notarizing_your_app_before_distribution\" target=\"_new\" rel=\"noopener nofollow\">https:\/\/developer.apple.com\/documentation\/security\/notarizing_your_app_before_distribution<\/a><\/li>\n<\/ol>\n<p>Observe que os links acima estavam ativos e relevantes no momento da reda\u00e7\u00e3o deste artigo.<\/p>","protected":false},"featured_media":476305,"menu_order":0,"template":"","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"class_list":["post-476304","wiki","type-wiki","status-publish","has-post-thumbnail","hentry"],"acf":{"faq_title":"Frequently Asked Questions about <mark>Code Signing: An Essential Element in Ensuring Software Authenticity and Security<\/mark>","faq_items":[{"question":"What is Code Signing?","answer":"<p>Code Signing is a digital procedure used to certify that a certain block of code originates from a specific source and hasn't been tampered with. It's used to maintain the authenticity and integrity of code executed on computers or downloaded from the internet, protecting users from rogue software and malware.<\/p>"},{"question":"What is the history of Code Signing?","answer":"<p>Code Signing originated in the mid-1990s when Netscape introduced object signing for Java applets, allowing them access to certain restricted APIs. This concept evolved into modern Code Signing. In 1996, Microsoft launched Authenticode, a proprietary technology for Code Signing, which was a major step towards consumer-oriented Code Signing.<\/p>"},{"question":"How does Code Signing work?","answer":"<p>Code Signing uses a cryptographic hash to sign the software's code. If the code is modified after signing, the signature becomes invalid. A Code Signing certificate from a trusted Certificate Authority (CA) is used to create this signature. When the signed software is downloaded, the user's system verifies the signature using the corresponding public key. If the signature verifies correctly, the system allows the software to run.<\/p>"},{"question":"What are the key features of Code Signing?","answer":"<p>The key features of Code Signing are integrity (it ensures the software code has not been tampered with), authentication (it verifies the identity of the software publisher), non-repudiation (the publisher cannot deny their association with the code), and timestamping (the signature includes a timestamp that indicates when the code was signed).<\/p>"},{"question":"What types of Code Signing certificates exist?","answer":"<p>There are two types of Code Signing certificates. A self-signed certificate is generated by developers and used to sign their code. However, this is not recommended for software distributed to the public. The second type is a certificate from a trusted CA, which verifies the developer's identity before issuing the certificate. This is the most commonly used type of Code Signing certificate.<\/p>"},{"question":"What are some problems and solutions related to the use of Code Signing?","answer":"<p>One problem is that if a private key is stolen, it can be used to sign software appearing to come from the original developer. This can be prevented with strong security measures like secure key storage, encryption, and strong passwords. Another problem is if a developer's certificate is compromised, it can be used to sign malicious software. Certificate Authorities have processes in place to revoke certificates that have been compromised.<\/p>"},{"question":"How do Proxy Servers relate to Code Signing?","answer":"<p>Proxy servers, like those provided by OneProxy, work as intermediaries between end-users and the internet, providing benefits like increased anonymity, bandwidth savings, and improved security. While they do not directly interact with Code Signing processes, proxy servers can enhance the security layer of a network, providing an additional layer of protection against external threats. Combined with Code Signing, they ensure a more secure online environment.<\/p>"}]},"_links":{"self":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki\/476304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki"}],"about":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/types\/wiki"}],"version-history":[{"count":0,"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki\/476304\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/media\/476305"}],"wp:attachment":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/media?parent=476304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}